javascript - 将函数存储在 Redux 存储中的替代方法是什么

标签 javascript reactjs redux react-redux

问题

我有这样的结构:

<MenuBar />
<NavigationBar>
  <irrelevant stuff here />
  <ActionButton />
</NavigationBar>
<Router>
  <Route ...>
</Router>

我希望导航栏中的 ActionButton 根据路由器(标准 ReactRouter 路由器)渲染的路由执行不同的操作

第一个想法

我的第一个想法是在商店中保存一个函数,并使用 mapStateToPropsconnect 将该函数作为 prop 发送到 ActionButton。每当回调发生变化时,我都会调度一个以该函数作为有效负载的操作。

我很确定这应该有效,但我知道在商店中存储不可序列化的内容可能会产生负面后果。特别是,它会带来存储内容的持久化和补充问题,以及干扰时间旅行调试。 This link from the docs讨论了它并引用了一些讨论该问题的 GitHub 问题。 This StackOverflow question也讨论这个问题。

问题

我见过很多地方人们说“你不应该这样做”,但我还没有看到在商店中存储函数的替代方法。我能想到的替代方案是使用 Prop 钻孔,但我真的很想避免这种模式。

此时,我真的不需要保留或补充存储,时间旅行调试是一个非常好的功能,但不是必须的。但是,如果有好的替代方案,我希望避免牺牲这些东西。

提前致谢! :)

最佳答案

几个选项:

  • 使用中间件监听“ACTION_BUTTON_CLICKED”操作,并根据其他值(存储状态、路由等)运行不同的逻辑。这可以是您自己编写的自定义中间件,也可以是通用副作用中间件,例如 redux-saga 或 redux-observable,让您可以响应分派(dispatch)的操作。
  • 根据其他行为将预定义操作放入存储中,并在单击按钮时调度该操作。

我在我的帖子 Practical Redux, Part 10: Managing Modals and Context Menus 中展示了预定义操作方法的示例.

关于javascript - 将函数存储在 Redux 存储中的替代方法是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53888703/

相关文章:

javascript - d3js 在多个图表之间切换

javascript - 在cherrypy中在python和javascript之间共享变量信息

javascript - JS Codecademy Return II - 返回问题

node.js - 我们如何在从 UI 传递到后端服务器时隐藏身份验证凭据等信息?

reactjs - React 组件不会重新渲染,但会调用 render()

javascript - Travis CI NodeJs 构建在本地运行,但在 Travis CI 上获得拒绝的权限

javascript - 如何只允许一个事件的 useState

javascript - React - 一次显示一个数组值并通过单击进行更改

javascript - 尽管收到有效的操作有效负载(异步身份验证调用),为什么我的 Redux 状态没有更新

javascript - 如何调用两个函数onClick()react/redux