【问题标题】:Redux connect and mapStateToPropsRedux 连接和 mapStateToProps
【发布时间】:2017-02-24 16:22:29
【问题描述】:

我试图了解 redux 的连接是如何工作的,我想知道它是否:

  1. 每次状态随新道具发生变化时都会创建一个新组件 或
  2. 更新现有组件的状态

如果是后者,这不违背 React 的不可变道具哲学吗? 它是如何更新道具的?

【问题讨论】:

    标签: javascript reactjs redux


    【解决方案1】:

    React 的不可变 props 理念意味着您不应该从组件内部更新 props。您可以将新的属性值从父组件传递给组件。这就是为什么存在 componentWillReceiveProps 方法的原因。

    基本上,react 组件接收道具并呈现 HTML。组件可以使用本地状态,但如果你使用 Redux,这通常是不需要的。 Redux 在单个状态对象中管理所有状态,并使用 connect 方法可以将全局 Redux 状态的一部分“连接”到反应组件。然后它将作为该组件内的道具可用。

    所以回答你的问题:答案 1 和 2 都不正确。 当使用 connect 将一个状态连接到您的组件时,它将将该状态作为道具传递。您的组件将没有状态(除非您编写自己的本地状态),只有道具。如果 redux 状态的相应部分发生变化,这些 props 会更新。

    【讨论】:

    • 您的快速回答。因此,由于我正在将 React 集成到现有应用程序中,而 Redux 目前不是一个选项,那么从组件外部模仿更新 props 的正确方法是什么?
    • 无论你在哪里渲染一个反应组件,你都可以传递动态道具(即来自一个变量)。每当道具更改时,组件的以下方法将按此顺序调用:1)componentWillReceiveProps()2)shouldComponentUpdate()3)componentWillUpdate()4)render()5)componentDidUpdate()您只需要基本的渲染方法组件。
    • 如果我对你的理解正确,你在你的渲染方法中“创建一个新组件”,如果它是一个现有的,react 会简单地更新它的道具?
    • 每次组件接收到新的 props 并重新渲染时,render 方法的输出 HTML 都会与 DOM 中的 HTML 进行比较,只有差异会在 DOM 中更新。我建议你阅读这个页面的 react 文档:facebook.github.io/react/docs/components-and-props.html
    • @MaloGuertin 是的,没错。 React 维护一个虚拟 DOM。所以每次 prop 或 state 改变时,react 的 diff 算法都会运行,如果组件存在于 DOM 中,它只会更新它。您可能会发现阅读本文很有帮助。 React Diff algorithm
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-03
    • 2017-05-17
    • 2016-11-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多