javascript - React + Flux - 在多页面上卸载页面

标签 javascript reactjs flux

考虑一个多页面应用程序,当您打开一个页面时,它会启动一个计时器,负责每 n 秒获取一次数据。现在考虑您想要转到另一个页面,您如何保证计时器将停止(因为第二个页面不需要它)。

我将按以下方式实现它:

App.jsx

onClickNavigateToPageA: function() { AppActions.goToA(); }

AppActions.js

goToA: function() {
   DispatchActionToLoadComponentPageA();
   DispatchActionToStartTimer();
}

现在我点击进入B页。如何告诉计时器停止?如果我在 componentWillUnmount 上执行此操作(我相信是通过操作),我将在操作期间分派(dispatch)操作(加载页面 B 的操作),因此这是错误的。

正确的方法是在加载页面 A 后立即注册一个回调(这将调用一个操作来禁用计时器),然后在加载任何其他页面时调用它?据我所知,商店现在不应该关注用于从服务器获取数据的API(包括计时器,它应该在 Action 创建者上)。

最佳答案

您可以使用所需的任何 JSON 负载来分派(dispatch)操作,这意味着您可以根据分派(dispatch)操作本身的属性对操作类型进行分组。在这种情况下,来自 DispatchActionToLoadComponentPageA 的负载可能是:

{ 
    type: 'pageLoad',
    page: 'pageA'
}

这与您可能发送的其他类型的操作不同,例如:

{ 
    type: 'xhrComplete',
    response: ...
}

现在,您的计时器可以监听 pageLoad 类型的操作,并根据正在加载的页面是否需要计时器来启动/停止自身。

关于javascript - React + Flux - 在多页面上卸载页面,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32877857/

相关文章:

javascript - Microsoft JScript 运行时错误 : Object required

javascript - 使用 getElementsByClassName 而不是 getElementById 修改脚本以追加子项

reactjs - 使用 Webpack 构建后未定义窗口

javascript - 如何在 react js中设置按钮点击的值?

javascript - 如何取消/忽略 redux 中的操作

javascript - WebGLBuffer 对象和 OpenGL 缓冲区处理 JavaScript 和 C++ 之间的互操作

javascript - 创建一个元史诗,其工作方式类似于combineEpics,但根据 namespace 选择一个史诗

javascript - 重新渲染时组件崩溃 | react 、Redux

javascript - Fluxxor 将 1 组以上的操作添加到 Flux 实例

reactjs - 使用 redux-form 在多个不同的挂载点绑定(bind)表单