2017-01-02 3 views
0

Reactでは、setStateを呼び出すと、状態が設定されたことを通知するコールバックがあります。しかし、私がReduxを使用するときは、ディスパッチを使用して状態を変更しますが、状態が更新されたかどうかをどのように知ることができます。例えばディスパッチを使用するときに状態がいつ更新されるかを知る方法がありません

dispatch({type: 'setCount', {count: 1}}); 

dispatch({type: 'add', {addedCount: this.state.count + 1}}) 

2行目は、最初の行に依存しますが、私たちのすべては、私はReduxの中で、この問題を扱うことができるか、SETSTATEは同期動作ではありません知っていますか?

+1

リアクションコンポーネントは依然としてローカル状態を維持することができます。この状態では、このような状況でやりたいことがあるようです。あなたがクリックで増分する何かを持っているなら、それを維持するために地元の州を使うことができます。そのような簡単な操作を複雑にする必要はありません。 –

+0

それはできません。 Reduxの問題ではありません。 Reduxは、ストアエンハンサーなどを使用しない限り同期的です。しかし、これは非常に興味深いものです。私は店の更新をデバウンスするために店のエンハンサーを使用しても、これは決して必要ありません。なぜあなたはそれが必要なのか、少し詳細を教えてください。 –

答えて

1

redux-thunkモジュールを使用すると、ディスパッチした操作からPromiseを返すことができます。これらのアクションのディスパッチ(...)は、魔法のようにプロミスを返すので、あなたはそれを(...)することができます。

一方、あなたのアクションが同期している場合、setTimeout(...、0)がそのトリックを行います。

あなたの例では、2番目のディスパッチは外部に依存しない限り、単純なsetStateでなければならないと思いますが、その場合はローカル状態ではなく、両方のアクションを実行する合成アクション同じ時間。リュクス・サンクもここで役立ちます。

+0

私は自分のアクション関数から約束を返すことができますが、私は約束を解決できるように状態が更新されたことをどのように知ることができますか? Reactでは、setStateには、状態が変更されたことをユーザーに伝えるコールバックがあります。 setTimeoutは実際に動作しますが、公式な方法ではないと思います。 – jasonjifly

+0

ポイントは同期操作に減らし、setTimeout 0を「待機」することができます。プロミスで非同期のものをラップすることでそれを行います。 setTimeout 0はハックではありません。インタプリタに、後で実行スタック内で何らかの操作をプッシュするように指示する方法です。 –

+0

はい、同意しますが、私はまだそれが良い方法ではないと思います。とにかく、あなたの答えのおかげで – jasonjifly

0

mapStateToPropsを使用してreduxストアからコンポーネントに変数を渡す場合は、のrenderメソッド内にconsole.log(this.props.variableName)を実行できます。レンダリングメソッドは、その変数がストアで更新されるとすぐに呼び出されます。

関連する問題