带有 Flux 的 Reactjs:何时何地在 Flux 应用程序中初始化计时器实用程序
Reactjs with Flux: when and where to initialize a Timer utility in a Flux application
我的申请中发生了三件不同的事情:
- 计时器设置为 10 秒间隔,直到被要求才停止
- 一旦计时器重新开始,异步 Api 实用程序模块会触发一个函数来调用 Api。
- 我有一个组件(带有随附的 Action 和 Store 模块),它获取 api 数据(具有相同属性的相似项目的列表)并将它们呈现到页面。
我的问题是:
Where and When do I initialize the timer to being so that my Component can start receiving data after its render()
method is invoked?
我考虑过在达到 return 之前将它放在 render
函数中,但这没有意义,因为我需要将 api 数据呈现给页面一旦收到数据。
我是否错误地构建了这个应用程序?我的 Timer and/or Api 实用程序也应该是 React 组件吗?
我相信有几种方法,但这是我的 2 美分:
假设您有 LogViewer 应用程序并且您希望每 10 秒获取并显示一次日志。
- 那么你会有一个
LogStore
和一个 LogViewer
组件。
- 在
LogViewer
组件的 componentDidMount
方法中,我会调用 LogStore.getLogs()
.
LogStore.getLogs()
会调用 APIUtils.getLogs()
并设置一个定时器,每 10 秒触发一次,每次触发时都会调用 APIUtils.getLogs()
。设置定时器后 LogStore.getLogs()
立即 returns 一个空数组。
- 空数组由
LogViewer
组件呈现(或显示加载栏)。
- 与此同时,来自
APIUtils.getLogs()
returns 和 GET_LOGS_SUCCESS
服务器操作的 ajax 调用被分派到所有商店。
LogStore
保存传入日志并为 LogViewer
组件发出更改事件以再次调用 LogStore.getLogs()
函数。
- 如果你想在某个时候停止计时器,那么在
LogViewer
组件中我会有一个停止按钮,当点击它时会创建 GET_LOGS_STOP
动作。
- 当
GET_LOGS_STOP
动作被分派到 LogStore
时,它会通过停止计时器做出反应。
我认为这可以满足您的要求。
我的申请中发生了三件不同的事情:
- 计时器设置为 10 秒间隔,直到被要求才停止
- 一旦计时器重新开始,异步 Api 实用程序模块会触发一个函数来调用 Api。
- 我有一个组件(带有随附的 Action 和 Store 模块),它获取 api 数据(具有相同属性的相似项目的列表)并将它们呈现到页面。
我的问题是:
Where and When do I initialize the timer to being so that my Component can start receiving data after its
render()
method is invoked?
我考虑过在达到 return 之前将它放在 render
函数中,但这没有意义,因为我需要将 api 数据呈现给页面一旦收到数据。
我是否错误地构建了这个应用程序?我的 Timer and/or Api 实用程序也应该是 React 组件吗?
我相信有几种方法,但这是我的 2 美分:
假设您有 LogViewer 应用程序并且您希望每 10 秒获取并显示一次日志。
- 那么你会有一个
LogStore
和一个LogViewer
组件。 - 在
LogViewer
组件的componentDidMount
方法中,我会调用LogStore.getLogs()
. LogStore.getLogs()
会调用APIUtils.getLogs()
并设置一个定时器,每 10 秒触发一次,每次触发时都会调用APIUtils.getLogs()
。设置定时器后LogStore.getLogs()
立即 returns 一个空数组。- 空数组由
LogViewer
组件呈现(或显示加载栏)。 - 与此同时,来自
APIUtils.getLogs()
returns 和GET_LOGS_SUCCESS
服务器操作的 ajax 调用被分派到所有商店。 LogStore
保存传入日志并为LogViewer
组件发出更改事件以再次调用LogStore.getLogs()
函数。- 如果你想在某个时候停止计时器,那么在
LogViewer
组件中我会有一个停止按钮,当点击它时会创建GET_LOGS_STOP
动作。 - 当
GET_LOGS_STOP
动作被分派到LogStore
时,它会通过停止计时器做出反应。
我认为这可以满足您的要求。