【问题标题】:React state vs. Redux state (real usecase)React 状态与 Redux 状态(真实用例)
【发布时间】:2018-05-01 09:00:43
【问题描述】:

我已经阅读了多个教程如何使用 Redux bot 在 React 中进行 CRUD没有作者解释了为什么他们使用 Redux。 (好像他们只是为了花哨而使用它,或者因为所有其他人都在使用它。)

引用here:

人们经常在需要之前选择 Redux。

通过进一步研究,我了解到 Redux 适用于:

  • 在组件之间共享状态
  • 让一些数据在整个应用程序中都可以访问

不存在错误或正确。但只有做有意义的事。

我的用例

我有一个使用共享组件的组件:

¦-- domains/FooManagement/Components/Editor.jsx <-- Most-parent of the editor
¦-- domains/FooManagement/Components/..the children of Editor.jsx
¦-- shared/Components/Tabs/Tabs.jsx <-- Most-parent of the tabs
¦-- shared/Components/Tabs/..the children of Tabs.jsx

Tabs.jsx 用于Editor.jsx。

哪种方法是正确的?

方法 1:React 状态(我认为它是正确的)

  • 每个可能发生的动态渲染都存储在Editor.jsx 的状态中。
  • onClick 选项卡(嵌套共享组件)调用用Editor.jsx 编写的回调,更新Editor.jsx 中的状态。然后,此状态更改会重新呈现新的活动标签
  • 这意味着在使用相同嵌套Tabs.jsx 的每个其他组件(如Editor.jsx)上,必须在编辑器中处理选项卡的更改。

代码示例:

/**
 * domains/FooManagement/Components/Editor.jsx
 * or 
 * domains/BarManagement/Components/Editor.jsx
 */
onTabChange(activeTab) {
    this.state.activeTab = activeTab;
    this.setState(this.state);
}

我认为这是正确的方法,因为:

方法 2:Redux 状态

  • Editor.jsx 有自己的状态
  • Tabs.jsx 有自己的状态
  • 状态存储在 Redux 中
  • Editor.jsx 不要将数据向下传递给 Tabs.jsx,因为 Tabs.jsx 从 Redux 存储中获取数据

好处:

  • 上面的代码示例不能在Editor.jsx 中,因为选项卡组件的行为方式不是编辑器的兴趣所在。 (或者编辑应该感兴趣?)

我认为这很糟糕,因为

  • 这里太魔幻了。想象一下,编辑器中有更多组件,如可排序、表格等。在Editor.jsx 中,您将看不到可以呈现视图的内容。它隐藏在其他组件中。

但是,如果它全部在 Editor.jsx 中处理,您可以概览和控制所有必须在任何更改时呈现的内容。

哪种方法适合您?

【问题讨论】:

  • 有 3 个组件:Sales.js、Totals.js 和 Payment.js,每个状态都存储在自己的组件中:您如何访问在 Sales 中选择了多少产品进行销售.js 显示 Totals.js 中的总金额以及 Payment.js 中的处理付款?
  • 您仍然可以使用方法 1 解决此问题。当所有状态都存储在您的最父组件中时,您可以从那里访问它。见Lifting State Up 和Thinking in React。

标签: reactjs redux


【解决方案1】:

说到真实的用例,我正在从事一个日常增长的项目,起初,纯 React 状态管理似乎是一种非常方便的开发方式,当组件结构仍然以某种方式扁平化时它工作得很好,但是随着我们的进行,项目变得越来越复杂,我的意思是,更多的组件变得嵌套,并且一个父级有一系列嵌套的子级,所以我们必须从父级一直传递道具到最远的孩子,每当我们需要重新渲染父级时,所有子级也必须经历这个循环,至于你的情况,如果你知道你的项目不会变得更复杂,Tabs.jsx 可能不会有类似的东西form 包含进一步嵌套的 subForm 包含 Grid 也许,你肯定不需要用 Redux 使你的生活复杂化,但正如我之前所说,对于我们来说,我们开始注意到在这个阶段,集成 Redux会很可观

【讨论】:

  • 总结了如果组件树大于 ca,您建议使用 redux。 5 个嵌套组件?
  • 更像是当您有一个包含许多组件的大项目,并且您的组件状态需要在不同组件之间全局共享时,有时您有 5 个嵌套组件但不需要在复杂的情况下改变状态方式,因此在这种情况下 React 状态似乎仍然合适。
猜你喜欢
  • 2018-12-25
  • 2021-08-04
  • 2018-08-05
  • 2018-05-02
  • 2023-03-14
  • 2018-01-21
  • 2019-02-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多