2017-07-02 2 views
0

Controlled ComponentssetStateについて読んだ後、私はReactの一貫したメンタルモデルを構築することに問題があります。setStateが非同期であるにもかかわらず、Reactの制御コンポーネントが機能する理由

言及したドキュメントからの制御されたコンポーネントの例、私の質問に関連する次の断片が含まれています。ユーザーは高速で、任意の編集操作を行うことができるので、とsetStateはおそらくです:

handleChange(event) { 
    this.setState({value: event.target.value}); 
} 
render() { 
    return (
    <input type="text" value={this.state.value} onChange={this.handleChange}/> 
) 
} 

質問です非同期では、event.target.value='a'onChangeが呼び出され、setState({ value: 'a'})となった瞬間t0で、ユーザがテキストを 'b'に変更し、瞬間t2でsetStateでキックインされた要求がキックインされ、テキストは古い値 'a'に置き換えられますか?

+0

同時に1人のユーザーだけが1つのコンポーネントと対話できます。これらのことがデータベースから得られた値である場合、データを共有している場合は、最新のデータセットを持っている場合のみ保存が行われ、それ以外の場合はコンポーネント1のユーザーがapply – Icepickle

答えて

0

setStateの正しい精神モデルは、「非同期」という漠然とした用語とは少し異なるはずです。間違いなくsetTimeoutに似ていません。 debounceのように、setStateを新たに呼び出すと前の設定が上書きされます。フレームワークがレンダリングを実行することを決定した瞬間、このコントロールのためにこの時点までに起こったすべてのsetStateが既にマージされていることが保証されます。それぞれの編集アクションによってonChang eが同期的に呼び出されるという仮定と共に、これは、レンダ機能が呼び出されていることを意味し、this.state.valueinput.valueに等しいことを意味します。

+3

あなた自身と公に話していますか? :D – trixn

+0

これはちょっと "投機的"なので、あなたの質問の補遺ですか?) – Icepickle

+0

これは基本的には正しいです。 'setState'は多かれ少なかれ瞬時に実行されます。呼び出された関数が実行を終了するまでは起動しません。これは混乱の原因となることがあります。なぜなら、Reactの開発者は、書いたものを国から読みたいことがあるからです。しかし、これは簡単な解決策の問題です。 https://stackoverflow.com/questions/35867038/what-the-difference-of-this-state-and-this-setstate-in-reactjs/35868086#35868086 –

関連する問題