2017-10-17 5 views
0

私はバインドされたアクションの作成者の中で基本的な検証を行っています。アクションクリエイターの条件付き発送

const mapDispatchToProps = { 
    onSomething: (props) => { 
     if (performValidation(props)) { 
      return { type: 'SOME_ACTION' }; 
     } 
    } 
}; 

検証が失敗し、ディスパッチするアクションが返されない場合、私はエラーを受け取りました。

アクションはプレーンなオブジェクトである必要があります。非同期アクションにはカスタムミドルウェアを使用します。

これは期待されますか?私はサンクを使用して問題を回避することができますが、それは非非同期条件付きディスパッチのための過剰なようです。

答えて

2

いいえ、ここではサンクスが正しいアプローチです。アクション作成者がバインドされると、それが呼び出され、出力はそのままdispatchに渡されます。条件付きロジックを「プレーン」アクションクリエイターに入れると、undefinedが返され、dispatch(undefined)になる可能性があります。

したがって、条件付きでディスパッチする必要がある場合は、バインドされたアクションクリエータを使用してコンポーネントの条件ロジックを処理したり、サンクをディスパッチしたり、サンクに条件ロジックを保持したりしないでください。私には、これはサンクの良いユースケースです。

+0

私は多くを考えました。ディスパッチしないでください。undefinedを無視してください。これにより、上記のような条件付きディスパッチが可能になり、ミドルウェアは必要ありません。 – madcapnmckay

+0

いいえ。ディスパッチ()の契約では、レデューサーに到達するプレーンなJSオブジェクト以外のものは、エラー期間とみなされます。ミドルウェアは、それらが減速機に達するのを妨げるか、途中でそれらを変換することによって非平衡オブジェクト値を受け入れるように「ディスパッチ」を「教える」ことができる。 'redux-thunk'は関数を探して呼び出し、ミドルウェアのパイプラインに沿ってそれらを転送しません。未定義の値をキャッチするミドルウェアも簡単に作成できますが、それはコアストアのAPIコントラクトビヘイビアとは別です。 – markerikson