2017-09-06 10 views
2

だから私は状態を設定することが反応することを知っているが、非同期およびすべてであり、我々はこのような状態を設定します。`this.setState`を取り消すにはどうしたらいいですか?

this.setState(previousState => { 
    return { /* some new state that uses `previousState` */ } 
}); 

だから私の質問は次のとおりです。私はthis.setStateをキャンセルできますか?previousStateを使用して、更新をレンダリングする必要がないと判断したとします。 setStateを取り消し、何も再レンダリングしないように指示します。

this.setState(previousState => { 
    if (/* previousState is fine */) { 
    // tell react not to do anything 
    } else { 
    return { /* some new state */ } 
    } 
}); 
+0

はどのようにあなたが別のアップデートを必要としないことを決定するであろうか?状態が変更されていないかどうかは分かりますか? – Chris

+0

最初に 'this.setState()'を呼び出すのはなぜですか? 'this.state'をチェックし、' this.setState() 'を呼び出さないようにするだけでよいのです。 –

+0

shouldComponentUpdateライフサイクルが必要なものです。可能な複製のhttps://stackoverflow.com/questions/44521391/reactjs-stop-rerendering-on-a-particular-state-change-with-shouldcomponentupdat/44522755#44522755 –

答えて

0

ここで私自身の質問にお答えして申し訳ありませんが、新品のReact 16ではsetStateを取り消すことができます。

nullでsetStateを呼び出すと、更新がトリガーされなくなりました。これにより、再レンダリングする場合に、アップデータ関数で決定することができます。

source

0

this.setState以外の状態を比較し、変更されているかどうかによってthis.setStateを発生させますか?

3

「何もしないように教えてください」というイディオムは、「前の状態を返す」です。 Reactの内部管理によって、DOMの実際の変更はないと判断され、ユーザーには何も表示されません。特に、デフォルトのshouldComponentUpdateは、2つのオブジェクトが同一である場合にfalseを返します。

だから、あなたが必要とする唯一のものは、次のとおりです。

return previousState

関連する問題