【发布时间】:2016-04-15 04:05:19
【问题描述】:
这是两个状态/reducer 之间数据共享的合理解决方案吗?
//combineReducers
function coreReducer(state = {}, action){
let filtersState = filters(state.filters, action);
let eventsState = events(state.events, action, { filters: filtersState});
return { events: eventsState, filters : filtersState};
}
export const rootReducer = combineReducers(
{
core : coreReducer,
users
}
);
如果是这样,如果两者都响应同一个调度的事件并且第二个归约函数取决于第一个的新状态,如何保证归约函数的执行顺序?
假设我们调度了一个 SET_FILTER 事件,该事件附加到过滤器存储中的 activeFilters 集合,然后根据 activeFilters 值更改事件存储中项目的可见性。
//ActiveFilters reducer
function filtersActions(state = {}, action){
switch (action.type) {
case SET_FILTER:
return Object.assign({}, state, {
[action.filterType]: action.filter
})
case REMOVE_FILTER:
var temp = Object.assign({}, state);
delete temp[action.filterType];
return temp;
case REMOVE_ALL_FILTERS:
return {};
default:
return state
}
}
我想我找到了答案 - 计算派生数据 - 重新选择
【问题讨论】:
-
这似乎不太理想。减速器应该是状态和动作的函数,仅此而已。将第三个参数传递给 events reducer 是不习惯的。这将有助于了解更多这里发生的事情。
filters和events减速器是什么样的? -
您好!您是否使用重新选择在减速器之间共享状态?你是怎么做到的?
-
好吧,找到了一个使用“mapStateToProps”发布的不同解决方案
标签: javascript redux