Javascript 使用redux循环在Cmd.run中未调用副作用函数
我正在开发一个react redux应用程序,在其中,单击一个按钮,我需要更改窗口位置。 到目前为止,我正在调度按钮单击操作,并尝试使用redux循环在reducer中实现导航 组件jsJavascript 使用redux循环在Cmd.run中未调用副作用函数,javascript,reactjs,redux,redux-loop,Javascript,Reactjs,Redux,Redux Loop,我正在开发一个react redux应用程序,在其中,单击一个按钮,我需要更改窗口位置。 到目前为止,我正在调度按钮单击操作,并尝试使用redux循环在reducer中实现导航 组件js class Component { constructor() { super() } render() { return ( <button onClick={() => this.props.onButtonClick()}>Navigate</button
class Component {
constructor() {
super()
}
render() {
return (
<button onClick={() => this.props.onButtonClick()}>Navigate</button>
)
}
}
const mapDispatchToProps = (dispatch) => {
return {
"onButtonClick": () => dispatch(handleClick())
};
}
减速机js
export default (state = {}, action) => {
if (action.type === NAVIGATE) {
return loop(state, Cmd.run(navigateTo));
}
};
效果js
export const navigateTo = () => {
window.location = "https://www.stackoverflow.com";
}
除了这个动作之外,我还有很多涉及副作用和状态操纵的动作,因此是redux循环
我有两个问题:
navigateTo()
。我做错了什么您的代码看起来是正确的。创建redux应用商店时是否使用了应用商店增强器?您是否尝试在减速器中设置断点并验证它是否按预期被调用 对于2号,您认为哪一部分不应该在减速器中?redux循环的核心原则之一是,状态更改只是操作可能产生的众多影响之一。因此,reducer不只是决定由于某个特定操作而现在发生的事情,它还决定接下来发生的事情。根据redux文档,reducer指定应用程序的状态如何随操作而变化,在我的例子中,我只是导航到一个新域,window.href是否应该在reducer中?我认为您设计它的方式很好。副作用需要存在于单独的函数中,因为它们由redux循环调用,而不是由reducer直接调用。我一直觉得把它们放在不同的文件中是很有帮助的,这样它们就可以被独立地重用和测试了。谢谢。我错过了商店增强器。已更新应用商店以使用redux循环安装,现在它可以工作了。
export const navigateTo = () => {
window.location = "https://www.stackoverflow.com";
}