【发布时间】:2018-06-07 10:32:01
【问题描述】:
我正在使用 redux 将搜索过滤器通过应用程序移动到组件。
我有一个组件,我在其中设置过滤器并使用调用调度功能
this.props.dispatch(setFilter(newFilter));
我使用滑块/范围组件来设置值,这些组件具有 handleAfterChange 方法,该方法设置为调用上述调度函数。这工作正常。
我还有通过单击按钮设置的过滤器,我创建了onClick 处理程序,并且这个处理程序调用提到了函数。我检查了我发送给setFilter 函数(newFilter)参数的内容,这是我想要设置的。
我的设置动作已定义:
export const setFilter = (filter = {}) => {
return {
type: SET_FILTER,
filter
};
};
我的减速器是:
const searchFilter = (prevState = INITIAL_STATE.filter, action) => {
switch (action.type) {
case SET_FILTER: {
// prevState is already the state
// I want to set up in this reducer
console.log(prevState);
return Object.assign({}, prevState, action.filter);
}
case RESET_FILTER: {
return INITIAL_STATE.filter;
}
default: {
return prevState;
}
}
};
问题是 prevState 已经是我想在 reducer 中设置的对象。 我正在检查(在另一个组件中)过滤器是否已更改,因此我得到 prevProps 和 nextProps 相同,因此不会触发任何操作。
因此,以某种方式分派的更改已经作为 prevProps 在 reducer 中。
【问题讨论】:
-
不确定你的意思,大多数人称 prevState 只是简单的 state,因为它是 reducer 的当前状态。如果它已经更新,那么你更新了它,你为什么不看看 Chrome devtools 的 Redux 标签(如果你没有它,请安装),看看有什么更新它?
-
我使用 redux 日志记录工具,我可以在其中查看有关 redux 事务的信息 - 上一个状态、操作和下一个状态。不知道为什么prev状态已经是需要设置的状态了。我还按照您的建议将 Redux devTools 安装到 chrome 中,我可以看到那里只触发了一个操作,prevState 和 nextState 的差异是我希望更改的。
标签: reactjs redux react-redux