React + Flux:动作可以返回值吗? (例如最后创建的 id)

Posted

技术标签:

【中文标题】React + Flux:动作可以返回值吗? (例如最后创建的 id)【英文标题】:React + flux: can action return a value? (e.g. last created id) 【发布时间】:2015-10-23 23:31:00 【问题描述】:

我正在创建一个简单的应用程序来开始使用 React、flux 和 react-router。这是一个简单的联系人列表应用程序。

有几个视图,例如“联系人列表”、“查看联系人”、“创建联系人”。

在“创建联系人”视图中,单击“保存”按钮会在 Dispatcher 中调度“创建”操作,该操作由 ContactStore 接收并在那里处理。

问题是:创建联系人后,我想切换到新创建的联系人的“查看联系人”视图。但为了做到这一点,我需要知道新创建的联系人的 ID。

改变当前路线应该由什么负责? “编辑”组件?联系商店? 他们应该如何获得新创建的 id?通过一些动作回调?或者商店应该发出“clientUpdated”事件?

【问题讨论】:

最好有一个名为 createContactAndRedirect 之类的新操作或您喜欢的任何操作。此操作会创建一个新联系人,然后通过让商店在使用新的联系人数据更新自身后执行路由更改(通过您的路由更改操作)来将您的路由更改为新联系人。 你满足于什么?我也面临同样的问题... 我不记得了。我认为我写了一些类似于flux的东西,但基于最终返回值的承诺。 【参考方案1】:

我会按照您的建议发出一个事件,并从服务器返回 id。一旦你有了它,你就可以使用 React-Router 提供的 <Redirect /> 标签来重定向到另一个路由。在我看来,我认为这将是最干净的方式。

Action 可以返回一个值,但我们尝试遵循一种方法,让商店返回一个值,而 Action 插入值。这使事情变得干净,并且易于思考谁在做什么。但这是一个约定,并不意味着这是“正确”的方式。

【讨论】:

那个解决方案有问题。假设商店每次创建新联系人时都会发出一个事件,并且组件会侦听该事件并在触发该事件后更改路由。由于不同的组件调用相同的操作而触发此事件时,如何防止重定向?我只想重定向作为对从该特定组件调用的操作的响应【参考方案2】:

如果您使用的是单页应用程序,我会将路由更改绑定到存储更改。 否则,最好在操作结束其请求后触发它

【讨论】:

以上是关于React + Flux:动作可以返回值吗? (例如最后创建的 id)的主要内容,如果未能解决你的问题,请参考以下文章

Flux 和 React JS 中的依赖动作

使用 Flux 和 React 处理 UI 状态

react--------------flux-------------劉

11react 之 flux

在 React Flux 中进行 Ajax 调用的位置

React 钩子需要返回一个值吗?