2016-12-09 30 views
0

in this answerと見られるように、ActionCreatorに状態を渡すことはアンチパターンと見なされます。 Redux Thunk Middlewareを使用して状態にアクセスします。React Redux:状態を「アクション」に渡すのがアンチパターンです。解決策は何ですか?

私は、フロントエンドの検索フォームのフィルタに基づいて、サーバーから項目を取得しています。 filtersがストアから来ているので、当然のことながら、私は自分のサーバーにフィルタを渡す必要があるので、私は自分の行動の作成者

export function getResults(filters){ 
    return Axios.get('localhost:80/getresults/',{params:filters}).then(
     // do something with results here. 
    ) 
} 

でこれをやっているが、これはアンチパターンとみなされます。

また、私はReduxのを使用することができますが、このようにサンク:私は状態にアクセスしていますので、

export function getResults(){ 
    return function(dispatch,getState){ 
     var filters = getState().reducer.filters; 
     return Axios.get('localhost:80/getresults/',{params:filters}).then(
     // do something with results here. 
    ) 
    } 
} 

これは、アンチパターンとみなされます。

どうすれば正しい方法で実装できますか?私はどこかでAJAXの呼び出しを完全に行うべきですか?

+0

あなたが指摘した答えの主なアイデアは、アクションクリエイターから直接アクセスしないでください(2番目の方法)。しかし、あなたはあなたが示した最初のアプローチであるあなたのアクションクリエイターに任意の議論(州やその他のオブジェクトの一部)を自由に渡すことができます。 – Ziumin

+0

@Ziuminは、「アクションクリエイターにstate.something.itemsなどのデータを渡すことは間違いなく反パターンであり、変更履歴を不明瞭にしてしまいますので、お勧めしません」と答えています。データをアクションに渡しても、アクション内から別のものに渡すのは大丈夫ですか? – PoeHaH

+0

引数としての状態の受け渡しは、アクションが状態から独立した状態になり、状態が存在することを知らないことさえあります。また、いくつかの模擬フィルタを簡単に通過させてテストすることができます。しかし、あなたがアクションクリエイターの中からステートを取得するとステートフルになります。これは 'add(2)'と 'add(2,2) 'のようなものです。どちらをテストするのが簡単ですか?そして、あなたはどの結果を簡単に予測できますか? – Ziumin

答えて

0

私はダンを尊敬するほど、彼のコメントには同意しない。私には、実際にアクションをディスパッチするかどうかを決定するか、または既存の状態を使用してアクションのコンテンツを生成するかどうかを決定する、サンクの状態へのアクセスは絶対に便利なツールです。

あなたのサンクの例は完全に受け入れ可能です。

関連する問題