【发布时间】:2018-03-22 20:01:48
【问题描述】:
我正在使用 react、redux 和 material-ui 构建一个网格和一个过滤器组件
这是我在 redux 中的过滤器状态对象的样子
{
1: {id:1, name:'firstName', value:'John'}
2: {id:2, name:'LastName', value:'Doe'}
}
商店中的物品对象
{
12: {id:12, firstName:'John', lastName:'Doe', contact:''}
13: {id:13, firstName:'Mark', lastName:'Doyle', contact:''}
}
当商店中过滤器对象的状态发生变化时,我想执行 applyFilters 函数来缩小项目范围。订阅状态对象中的更改并执行操作以更新商店中另一个对象的状态的最佳模式是什么?还是有更好的方法来解决这个问题?
当前实施
我不确定这是否是在动作创建者中访问状态的反模式。
export function updateFilters(namespace, filter, filterText) {
return (dispatch, getState) => {
// To update filters object in the store
dispatch({
type: `${namespace}/${UPDATE_FILTERS}`,
value: filterText,
payload: filter.get('id')
})
//Actual filtering
let state = getState();
let filters = state[`${namespace}`].filters;
let items = state[`${namespace}`].items;
let filteredItems = applyFilters(items, filters);
// To update filteredItems in the store
dispatch({
type: `${namespace}/${APPLY_FILTERS}`,
payload: filteredItems
})
}
}
【问题讨论】:
-
我绝对建议将所有状态操作留在减速器中。不过,我实际上并没有看到您在哪里更新状态。这是否发生在 applyFilters() 中?
标签: react-native redux react-redux