私はReactを初めて使用し、コンポーネントの状態で自分のコンポーネントだけが必要とする情報を格納しています。 this.setState
コールの非同期性に問題があります。React:直接値割り当てを使用してコンポーネントの状態を更新していますか?
this.state.stateKey = newValue
と直接的に状態値を割り当てるだけで、私はこれを回避しました。 this.setStateが私にとってうまくいかず、直接割り当てがどう機能するのかを具体的に示す短いサンプルケースについては、以下を参照してください。
import React from 'react';
export default class Test extends React.Component {
constructor(props) {
super(props);
this.state = {
testVal : "Enter new text here"
}
}
runTest = (evt) => {
// if I run the test with the below line, the value
// in state is not updated before the console.log
this.setState({testVal: evt.target.value});
// if I run the test with the below line, the value
// in state is loaded before the console.log call,
// and I do get a print of the new value
this.state.testVal = evt.target.value;
console.log("testVal: ", this.state.testVal);
}
render =() => {
return(
<div>
Test
<input
class="form-control"
type="text"
defaultValue={this.state.testVal}
onBlur={this.runTest}
/>
</div>
)
}
}
私の質問はthis.state.stateKey = newValue
を使用して直接代入して状態を更新するに何か問題ありますか?他の回避策がありますが、これについては言及していません。それが間違っているはずです。ありがとう。
わかりました。それは国家の不変性に関するものです。ありがとう。状態以外の場所に値を格納する必要があるかどうかは、複数の関数が画像を描画するために使用する一時的な値であるためです。イメージを描画するために必要なすべてのデータはバックエンドDBにあります。だから、私が州で持っているデータの記録を保管し、それが時間とともにどのように変化したかは重要ではありません。あなたはこれについて何か提案があれば、私はすべての耳です。 –
これらの値が変更されていないか、または変更されていることが絶対に確実な場合は、UIに何らかの影響がないので、これらの値をクラス変数に格納することができます – Swapnil
もう一度お返事ありがとうございます。クラス変数を使用する予備的なテストがうまくいくように見えます。ヘルプをよろしくお願いいたします。 –