は、私は、タイムライン数秒ごとに更新するコンポーネントを書き込もうとしましたので、私はこのようにforループを使用し、間隔がより明白にするためにsetTimeout
を使用します。setTimeoutを使用してsetStateを実行すると、どのように反応コンポーネントを再レンダリングできますか?
let tmp = this.state.colors;
// colors is an array
for(let i = 0 ; i < 4; i++){
if(tmp[i]=="blue"){
tmp[i]="green";
setTimeout(function() {
console.log(tmp);
this.mapped.setState({
colors: tmp
});
}.bind({mapped:this}), 2000);
}
}
しかし、再することができないようです一度に私のコンポーネントをレンダリングすると、2秒ごとにコンポーネントのアップデートがタイムラインに反映されますが、1回だけ再レンダリングします。
eventHandler
が完了した後、すべての反応プロセスがsetStates()
であることがわかっています。私は落胆していないことを知っていますが、forceUpdate
を使用しようとしましたが、動作しません。
コンポーネントを再レンダリングするにはどうすればよいですか?
ご協力いただければ幸いです。
更新アンドレ・リー@
感謝。
for (let i = 0; i < 4; i++) {
setTimeout(function() {
tmp[i] = "green";
this.setState({
colors: tmp
});
}.bind(this), 2000 * (i + 1));
}
上記のコードは機能します。
毎回同じ_tmp_を更新していないことをどのように知っていますか? (したがって何もない)。そこに 'console.log(tmp)'を入れてください。 – dandavis
forループは非常に高速ですので、setTimeoutには '2000 * i'を使うべきです。私はちょうど以下の答えを投稿しました。 –