PS:因項目采用MUI,故,在此所講的checkbox組件為MUI里的checkbox
因checkbox組件里 oncheck函數沒法判斷復選框是否選中,故,若直接復用且通過state改變checked屬性,會引起一選全選,不選都不選(因為這里的state掌管着所有checkbox的checked值)。為避免這種情況,有兩種解決方式:
1.將checkbox分離出來;
上圖為確保只有當卡片至少選中一個時刪除按鈕才顯示,采用將其分離的方式。
實現方法:在自己封裝的checkbox里定義了一個全局數組arr,通過props將卡片ID傳給checkbox組件,在調用oncheck函數的時候,當checked值為true,將id push進arr里,否則,將id從arr里移除。(完全可看成是僅對當前checkbox進行操作)。最后將全局數組arr通過 props方式傳遞給父組件(在這里是卡片組件)
代碼片段如下:
2.直接復用但不采用state控制checked屬性,通過定義一個全局數組idArr里,記錄所選checkbox的ID,當點擊復選框時,若ID在數組idArr里,則將該ID從數組里移除,若不在數組idArr里,則將其添加進數組。
若id1存在於idArr中,移除id1的方法: idArr.splice(idArr.indexOf(id1),1)
若id1不在idArr中,添加id1的方法: idArr.push(id1)
上圖采用的方法為第二種,當點擊提交時,直接將當前idArr作為參數傳遞,即可使用