1

https://facebook.github.io/react/docs/react-component.html#setstate

シグネチャ function(state, props) => newState で関数を渡すことも可能です。これにより、値を設定する前に state と props の以前の値を参照するアトミックな更新がキューに入れられます。たとえば、state の値を props.step でインクリメントしたいとします。

this.setState((prevState, props) => {
  return {myInteger: prevState.myInteger + props.step};
});

ここでのアトミック更新とはどういう意味ですか? JavaScript はシングルスレッド言語ではありませんか? これは、すべての更新がアトミックにバインドされていることを意味しますか?

4

1 に答える 1

3

シングルスレッドはい、しかし潜在的な非同期性もたくさんあります。

let atom = 10
atom = 20
console.log(atom) // guaranteed to be 20, so "atomic"

// race condition
setTimeout(() => atom = 30, Math.random() * 1000)
setTimeout(() => atom = 40, Math.random() * 1000)

setTimeout(() => console.log(atom), 2000) // 30? or 40? random!

setStateは非同期呼び出しであるため、state実行後に変更された可能性があります。

おそらく、コールバック関数がトランザクションの更新をキューに入れるという別の言い回しが適用される可能性がありますが、派手な言い回しはここで混乱を招く可能性があると思います。状態が変更された可能性があることを説明するのが最善であるため、コールバックには以前の状態の正確なスナップショットがあります。

于 2017-01-04T06:35:53.873 に答える