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

时间:2015-10-01 00:53:16

标签: javascript reactjs flux

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

我会按以下方式实现它:

App.jsx

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

AppActions.js

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

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

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

2 个答案:

答案 0 :(得分:2)

您可以使用所需的任何JSON有效内容调度操作,这意味着您可以按调度操作本身的属性对操作类型进行分组。在这种情况下,来自DispatchActionToLoadComponentPageA的有效负载可能是:

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

与您可能发布的其他类型的操作不同:

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

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

答案 1 :(得分:1)

如果您不使用计时器和商店,我将不会使用动作和通量循环。如果它与商店有关,则使用通量循环。 无论如何,我只会使用一个普通的"计时器"具有所需功能的模块,并在需要时打开/关闭。