这是两个州/减少者之间数据共享的合理解决方案吗?
//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
}
);
Run Code Online (Sandbox Code Playgroud)
如果是这样,如果对同一个调度事件和第二个减少函数的回答都取决于第一个的新状态,那么如何保证执行reducer函数的顺序呢?
假设我们SET_FILTER在过滤器Store中调度追加到activeFilters集合的事件,然后根据activeFilters值更改事件Store中项目的可见性.
//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
}
}
Run Code Online (Sandbox Code Playgroud)
我想我找到了答案 - 计算派生数据 - 重新选择
/--------container--------/
import {getGroupsAndMembers} from '../reducers'
const mapStateToProps = (state) => {
return {
inputValue: state.router.location.pathname.substring(1),
initialState: getGroupsAndMembers(state) <-- this one
}
}
/--------reducers--------/
export function getGroupsAndMembers(state){
let { groups, members } = JSON.parse(state)
response = {groups, members}
return response;
}
GroupsContainer.propTypes = {
//React Redux injection
pushState: PropTypes.func.isRequired,
// Injected by React Router
children: PropTypes.node,
initialState:PropTypes.object,
}
Run Code Online (Sandbox Code Playgroud)
不要忘记遵循“连接”指南
export default connect(mapStateToProps,{ pushState })(GroupsContainer)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5483 次 |
| 最近记录: |