私はユーザーに小さなリストが表示され、動的にフィルタリングできる小さなアプリケーションを持っています。お互いに依存するレデックスレデューサーを分ける方法は?
だから私は、私の状態は次のようになり考えた:すでにおそらく悪い考えです..which
{ data: [], filters: {}, filteredData: [] }
。
- UPDATE_FILTERS
- 初期DATA_RECEIVED(一度だけ、ページの読み込みに):
は、私はまた、アクションに応答することを、これまでのところ唯一の減速を持っています。
私の減速は、次のようになります。
import {UPDATE_FILTERS, DATA_RECEIVED} from '../actions/actions'
function getFilteredDataRows(filters, data){
const distanceMin = parseInt(filters.distanceMin) || 0;
const distanceMax = parseInt(filters.distanceMax) || 9999999999;
const location = filters.location || '';
return (
data
.filter((swim) => swim.location.toLowerCase().includes(location.toLowerCase()))
.filter((swim) => swim.distance > distanceMin)
.filter((swim) => swim.distance < distanceMax)
);
}
const filterReducer = (state = [], action) => {
switch(action.type){
case UPDATE_FILTERS:
const newFilters = Object.assign({}, state.filters, action.filters);
return { filters : newFilters, data: state.data, filteredData: getFilteredDataRows(newFilters, state.data)};
case DATA_RECEIVED:
return {filters : state.filters, data: action.data, filteredData: getFilteredDataRows(state.filters, action.data)};
default:
return state
}
}
export default filterReducer;
そしてこのすべてが動作します。しかし私にとっては、それも悪臭を放つ。
- FilterReducer(フィルタの更新)
- DataReducer:私は二つに私の減速を分離できるようにしたいと思い
を(。藤堂さんとダンの1)Reduxのチュートリアルに従っている (filteredData更新)
しかし、第2のものは最初のものに依存しています。これをきれいに行う方法はわかりません。
アイデアはありますか?これらは真のニーズではなく、いくつかの単純化されている場合には、事前
これは有望に見える:http://redux.js.org/docs/recipes/reducers/BeyondCombineReducers複雑なセレクタのために、あなたはうまくReduxのドキュメントで説明されて
reselect
、に探してしまいます.html#共有データ - スライス - レデューサー間 –&https://github.com/acdlite/reduce-reducers –
アクションコードを共有できますか? – Aaqib