【问题标题】:REST Polling in React + FluxReact + Flux 中的 REST 轮询
【发布时间】:2016-11-10 03:07:11
【问题描述】:

我是 Flux 新手,这是一个最佳实践问题。

我有一个服务器,我正在将我的应用程序登录到其中,成功登录后,我会返回一个 tokenId 和我放入商店的那个令牌的到期时间。

tokenId 附加到后续 API 请求以确保我的会话有效。在超过到期时间之前,我需要发送一个生成新 tokenId 的请求。

轮询 (setTimeout) 令牌再生的最佳地点在哪里?我相信从 Store 调用 Action 或 API Util 会破坏 Flux Flow 图,这不是 View 应该负责的逻辑......

【问题讨论】:

  • 如果您只是想在自动过期之前获得一个新的,那么过期有什么意义呢?为什么不在经过身份验证的请求上刷新令牌?此外,将令牌存储在商店中似乎不是一个好主意。用户每次刷新页面都需要重新登录吗?
  • 令牌在用户离开应用程序后最长 20 分钟内有效。如果他们在令牌到期之前再次访问该站点,他们会自动重新登录。如果他们访问该站点并且令牌已过期,他们需要重新输入他们的凭据。

标签: reactjs flux reactjs-flux


【解决方案1】:

这是通用问题“应在 React/Flux 架构中的何处触发异步操作?”的特定版本。我对此进行了很多讨论,但没有一个“正确”的答案。一些选项:

  • 从商店触发,在处理updateToken 操作时开始超时。这具有将所有业务逻辑保留在商店中的吸引力,但会使商店更难测试和推理。一种观点认为,保持所有存储流程同步可以简化事情。

  • 来自 React 的触发器,可以在您的顶级 App 组件中或在特殊的高阶组件中。您将使用componentWillReceiveProps 检查令牌值的变化并启动计时器。这有一些吸引力,因为您已经在监听存储更改并且可以利用各种生命周期事件(例如,清除 componentWillUnmount 上的计时器)。没错,这不是“视图”逻辑,但顶级 React 组件通常扮演控制器角色而不是视图角色。

  • 在“登录”操作中触发。这或多或少是 Redux/thunk 的做法,将异步进程留给操作本身,但在 Flux 实现中并不常见。

  • 拥有一个单独的 API 控制器,该控制器使用操作与商店进行通信。仍然必须有人触发loginController.login(),但进一步的异步进程由该控制器处理,并且更新通过操作到达存储。这个控制器可能完全负责令牌的详细信息和更新,这样商店就不必知道它。

【讨论】:

  • 感谢您的帮助,顶级组件中的 Trigger from React 感觉是最好的解决方案。
猜你喜欢
  • 2015-11-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-06-30
  • 1970-01-01
相关资源
最近更新 更多