前提・実現したいこと
[https://mui.com/components/checkboxes/#indeterminate]
上記URLにあるようなコンポーネント作成したいと思い、
親子関係にあるチェックボックス操作で、チェック状態を維持したいと思っています。
子のチェックボックスが変わったら、checkedをtrueにしたいのですが連想配列の操作がうまく行っていません。
JSON
1{ 2 "value": [ 3 { 4 "parent_id": "2020", 5 "state": [ 6 { 7 "child_id": "100", 8 "checked": false 9 }, 10 { 11 "id": "200", 12 "checked": false 13 } 14 ] 15 }, 16 { 17 "parent_id": "2021", 18 "state": [ 19 { 20 "child_id": "3", 21 "checked": false 22 } 23 ] 24 } 25 ] 26}
発生している問題・エラーメッセージ
Cannot assign to read only property 'checked' of object Cannot set properties of undefined
該当のソースコード
checkboxのchangeイベントで下記のように該当するchild_idを特定し、checkedを書き換えようとしています。
一旦、一時的な更新データを作成した上で、スプレッド構文にてデータの更新を試みようとしています。
javascript
1checkArray.forEach((checkData, index) => { 2 const result = checkData.state.findIndex((data) => data.id === e.target.value); 3 if (result !== -1) { 4 // 親データを取り出し、一時領域に格納 5 tmpParent.year = checkData.parent_id; 6 tmpParent.state = []; 7 8 // 子のデータを取り出し更新、一時領域に格納 9 tmpChild = { ...checkData.state[result], ...{ checked: true } }; 10 tmpParent.state[tmpParent.state.length] = tmpChild; 11 12 const tmp = { ...checkData.state, ...tmpParent.state }; 13 tmpParent.state = tmp; 14 15 } 16});
試したこと
連想配列で下記のように処理してもエラーとなってしまい、スプレッド構文で更新をしようとしています。
javascript
1checkArray[index].stete[result].checked = true
補足情報(FW/ツールのバージョンなど)
react 17.2
recoil 0.5.2
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/11/14 12:42
退会済みユーザー
2021/11/14 15:09 編集
2021/11/29 00:25