必須プログラムの最も重要な機能は、状態とその変更です。不変状態はReactJの機能的な機能ですか?
ReactJsは、プログラミングの機能スタイル(例:純度、高次関数を使用)を奨励します。私はReactJsでimmutable stateを使用しているかどうかを知りたがっていますが、この特徴はまだ必須の機能であるか、機能的な「スタイルの状態」と考えることができますか?
理論的には、純粋な命令型プログラムの反応状態と状態の違いは何ですか?
必須プログラムの最も重要な機能は、状態とその変更です。不変状態はReactJの機能的な機能ですか?
ReactJsは、プログラミングの機能スタイル(例:純度、高次関数を使用)を奨励します。私はReactJsでimmutable stateを使用しているかどうかを知りたがっていますが、この特徴はまだ必須の機能であるか、機能的な「スタイルの状態」と考えることができますか?
理論的には、純粋な命令型プログラムの反応状態と状態の違いは何ですか?
理論的には、純粋な命令型プログラムの反応状態と状態の違いは何ですか?
Reactで状態(this.setState
を使用)を更新する目的はすべて、状態が更新されたことをコンポーネントに通知し、再レンダリングが必要なことです。
しかし最終的には、Reactの状態Aから状態Bに変更したい場合は、イベントハンドラの内部で行います。必要に応じて実行することができますが、実際には変更しないで初期状態。例えば
// OK
let foo = this.state.foo;
foo = deriveSomeValue(foo);
this.setState({ foo });
// BAD
this.state.foo = deriveSomeValue(foo);
this.setState(this.state);
最初の例(OK)では、ある程度の不純物が確認できます。 foo
は変更されていますが、少なくとも元の状態は変更されていません。
第2の例(BAD)では、同じレベルの不純物を有するが、悪化する。私たちは現在の状態を直接変更しており、予測できない結果を生む可能性があります。 「this.state
でXを実行すると、なぜ正しくレンダリングされないのですか?」と尋ねる人々に、Stack Overflowの投稿が多すぎます。言い換えれば、この不変性のパラダイムは実用的な理由から強制されます。それはReactが働くように設計された方法であり、他の方法では(ケースバイケースで)未定義の挙動が得られます。予測不可能な結果をもたらすことができる
別の例:この場合には、状態はまだ今までリアクト通知する前に更新され、
const foo = this.state.foo;
foo.someProperty = getSomeValue();
this.setState({ foo });
。 (これは、暗黙的にコピーされるのではなく、オブジェクトがexplicitly referencedであることを意味します)。
実際、イベントハンドラ内の命令型でReactの状態Aから状態Bに移行できますが、初期状態が直接変更されないことを示します。複雑な変更が必要な場合は、deep copyのオブジェクトを実行してから、必要な変更を行うことをお勧めします。以下は完全に罰金です:
const foo = cloneObject(this.state.foo);
// `cloneObject` is an entirely contrived function. You'll have to pick a
// deep copying library. Google around for "JavaScript deep copying"
foo.someProperty = getSomeValue();
this.setState({ foo });
あなたは(意味的に呼ぶことができるものを)直接プロパティを変更している場合、それは必ずしも変更することなく、完全に新しいオブジェクトを生成するように、また、あなたは、不変のデータ構造を使用することができますオリジナル。そのための良い図書館は(あなたが言及したように)ImmutableJSでしょう。
let foo = this.state.foo;
foo = foo.set('someProperty', getSomeValue());
this.setState({ foo });