前提・実現したいこと
親コンポーネントで子テーブルの指定行のデータを削除した後に
削除が反映された子テーブルを描画したい。
発生している問題・エラーメッセージ
現状はエラーメッセージ等は無く、テーブル削除の処理を行っても子テーブルに反映されていない状態です。
該当のソースコード
※所々のソースコードは省かせてもらっています。(見たいコード等ありましたら教えてください。)
・親コンポーネント
javascript
1export default function SpecimenMerge(props) { 2 3const [mergedJson, setMergedJson] = useState(''); 4 5//Deleteボタン押下時に処理 6 const onSelect = (idx) => { 7 const result = window.confirm('Are you sure you want to delete it?'); 8 if (!result) return; 9 // console.log("filter処理テスト"); 10 let deleteAfterData; 11 deleteAfterData = mergedJson.filter((r, index) => index != idx + 1); 12 13 console.log(Object.is(deleteAfterData, mergedJson)); 14 setMergedJson(deleteAfterData); 15 }; 16 17 18 return( 19 <Box p={1}> 20 21 {(() => { 22 if (mergedJson != null) { 23 { 24 return mergedJson ? <div><SpecimenMergeResultTable datas={mergedJson} onSelect={onSelect} /></div> : 25 <TextField id="remarks" size="small" label="Data Loding..." disabled="true" fullWidth variant="outlined" /> 26 } 27 } else { 28 return <TextField id="table" size="small" label="No merge result" disabled="true" fullWidth variant="outlined" /> 29 } 30 })()} 31 </Box> 32 ); 33}
・子コンポーネント
javascript
1export default function SpecimenMergeResultTable(props) { 2 const onSelect = props.onSelect; 3 const [datas, setDatas] = useState(props.datas); 4 console.log("************"); 5 console.log(props); 6 console.log("************"); 7 8 9 return( 10 <TableBody> 11 {stableSort(rows, getSorting(order, orderBy)) 12 .slice(page * rowsPerPage, page * rowsPerPage + rowsPerPage) 13 .map((row, i) => { 14 return ( 15 <TableRow 16 hover 17 tabIndex={-1} 18 key={i} 19 classes={{ root: classes.tableRow, }} 20 > 21 <TableCell key='firstIndex'>{page * rowsPerPage + i + 1}</TableCell> 22 {header.slice(0, header.length - 1).map((h, hi) => 23 <TableCell key={hi}>{row[h.id]}</TableCell>)} 24 <TableCell key='lastIndex'> 25 <Button size="small" variant="outlined" onClick={() => onSelect(i)}> 26 Delete 27 </Button> 28 </TableCell> 29 </TableRow> 30 ); 31 })} 32 {emptyRows > 0 && ( 33 <TableRow key='emptyIndex' style={{ height: (dense ? 33 : 53) * emptyRows }}> 34 <TableCell colSpan={6} /> 35 </TableRow> 36 )} 37 </TableBody> 38 ); 39}
試したこと
まず、親コンポーネント側でObject.is関数で同じ値ではないか確認しました。(同じ場合再レンダリングされないため)
結果はfalseとなっていました。また値を変更した時に再レンダリングされていない等の場合も考えて
ボタン押下処理内で setMergedJson(null); のような処理を試してみました。
その結果はnullの場合のNo merge resultのような描画がされ、再レンダリングされている事が確認できました。
次に子コンポーネントで変更された値がpropsに渡ってきているかを確認しましたが
結果は削除処理後の正常な値が送られてきていました。
以上のことを試してみましたが自己解決が難しかったため
お手数をおかけしますがご教示をお願いしたいです。
補足情報(FW/ツールのバージョンなど)
ここにより詳細な情報を記載してください。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。