[react]ユーザ状態と非同期
ケース
受信json objectはpropsとして変更されましたが、再レンダリングできません.
usestate,,言うことを聞かない.
まず、親構成部品が{frontend:}と同じ情報を送信した場合.
現在の構成部品は、情報を受信して画面に表示します.
現在の構成部品で
コンソールには検索キーワード 問題は、オブジェクトを変更する前に浅いコピーを行ったことです.
オブジェクトが参照変数であるためです.
そのまま変更しました.
動きが素晴らしかったです…^^
オブジェクトを深くコピーする必要があります.
オブジェクトが変化しているかどうかを検出することで、オブジェクトを再レンダリングします.
受信json objectはpropsとして変更されましたが、再レンダリングできません.
usestate,,言うことを聞かない.
まず、親構成部品が{frontend:}と同じ情報を送信した場合.
現在の構成部品は、情報を受信して画面に表示します.
現在の構成部品で
+
ボタンを押して数量を増やそうとします.コンソールには
+
ボタンが押されていますが、構成部品は変更されません.
// props.positions == {"frontend":1}
function plusCount(name){
let newPos = props.positions;
newPos.map(pos => {
if (pos.name === name) {
pos.count++;
}
});
console.log("+");
// 값은 변경 되었다!
props.setPositions(newPos);
// 상위 컴포넌트로 변경된 값을 보냈는데 변경 되지 않는다.
}
エラーコード에러 코드라도 나면 좋을텐데 콘솔 창이 깨끗해서 눈물이 났다.
解決策useState 객체 깊은 복사
let newPos = props.positions; // 얕은 복사
JavaScriptからオブジェクトをコピーする場合は、深度コピーが必要です.オブジェクトが参照変数であるためです.
JSON.parse(JSON.stringify(객체))
を用いて深さ放射を行った.そのまま変更しました.
let newPos = JSON.parse(JSON.stringify(props.positions))
本当に基本の中で最も基本的な~~~何時間ももがいた動きが素晴らしかったです…^^
オブジェクトを深くコピーする必要があります.
オブジェクトが変化しているかどうかを検出することで、オブジェクトを再レンダリングします.
Reference
この問題について([react]ユーザ状態と非同期), 我々は、より多くの情報をここで見つけました https://velog.io/@uoayop/React-useState와-비동기テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol