前提・実現したいこと
useStateで変更した値が初期値に戻ってしまうのを防ぎたいです。
発生している問題・エラーメッセージ
バックエンド処理のレスポンスで取得出来ていた値が
どこかのタイミングで恐らく初期化されてしまっている。
該当のソースコード
javascript
1 //子のテーブルで表示する値 2 const [cellcsvs, setCellcsvs] = useState([]); 3 4 useEffect(() => { 5 setCells(cellcsvs); 6 //ここではcellcsvsに値が入っている。 7 console.log(cellcsvs); 8 }, [cellcsvs]); 9 10 //子に設定したテーブルのボタンクリック時に走る 11 const radioBtnCallback = useCallback((idx, e) => { 12 console.log("Show Photo: " + idx) 13 14 //ここのcellcsvsの値がから配列になってしまっている。 15 console.log(cellcsvs); 16 console.log(1010101010101); 17 idx = Number(idx); 18 setOpen(true); 19 }, []) 20 21 //バックエンド処理 22 //検索ボタン押下時 23 const handleSubmit = (e) => { 24 e.preventDefault(); 25 const dfrom = datefrom ? new Date(datefrom._d) : ''; 26 const updatefrom = datefrom ? `${dfrom.getFullYear().toString().padStart(4, '0')}/${(dfrom.getMonth() + 1).toString().padStart(2, '0')}/${dfrom.getDate().toString().padStart(2, '0')}` : ''; 27 const dto = dateto ? new Date(dateto._d) : ''; 28 const updateto = dateto ? `${dto.getFullYear().toString().padStart(4, '0')}/${(dto.getMonth() + 1).toString().padStart(2, '0')}/${dto.getDate().toString().padStart(2, '0')}` : ''; 29 // console.log(company_cd, project_cd, user_id, filename, updatefrom, updateto, examno); 30 31 SpecimenService.getMediCsv(company_cd, project_cd, user_id, filename, updatefrom, updateto, examno).then((resp) => { 32 33 //レスポンスの値セット 34 setCellcsvs(resp.data); 35 }); 36 }; 37 38 39return ( 40 <Box p={1}> 41 {(() => { 42 if (cellcsvs.length) { 43 //検索結果を一覧表示するテーブル 44 return <SpecimenMedicalResultTable data={cellcsvs} callback={radioBtnCallback} /> 45 } 46 })()} 47 48 </Box> 49 );
※コード量が多いため重要そうな箇所のソースコードだけ載せています。
試したこと
同じような問題が発生している方がいないか調べて見たのですが見つけることができず、
ダメもとで(新たにtest変数を追加)
javascript
1 const [cellcsvs, setCellcsvs] = useState([]); 2 var test = []; 3 4 useEffect(() => { 5 setCells(cellcsvs); 6 console.log(cellcsvs); 7 //ここでもtestには値が入っている。 8 test = cellcsvs; 9 }, [cellcsvs]); 10 11const radioBtnCallback = useCallback((idx, e) => { 12 console.log("Show Photo: " + idx) 13 console.log(test); 14 console.log(cellcsvs); 15 console.log(1010101010101); 16 idx = Number(idx); 17 setOpen(true); 18 19 // while (cells[i].) { 20 21 // } 22 }, [])
のような実装方法も試してみましたがこれもコールバック内では値が空配列になってしまっていました。
useEffectなどで問題が発生してしまっているかなど考えていますが、理解が浅く
自己解決することが難しかったためどなたかご教授をお願いします。
他に確認したいファイル等ありましたら教えてください。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/03/20 13:02 編集