Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用redux循环在Cmd.run中未调用副作用函数_Javascript_Reactjs_Redux_Redux Loop - Fatal编程技术网

Javascript 使用redux循环在Cmd.run中未调用副作用函数

Javascript 使用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

我正在开发一个react redux应用程序,在其中,单击一个按钮,我需要更改窗口位置。 到目前为止,我正在调度按钮单击操作,并尝试使用redux循环在reducer中实现导航

组件js

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";
    }