【问题标题】:Redux - Is it ok to pass props to child container components?Redux - 可以将道具传递给子容器组件吗?
【发布时间】:2017-09-11 17:27:03
【问题描述】:

我遇到了一种情况,我必须将 props 从父容器组件传递到子容器组件,以便子容器中的展示组件具有初始状态。还有另一种方法可以解决这个问题吗?这是不受欢迎的吗?

【问题讨论】:

  • 你能说得更具体点吗?为什么子组件需要来自 props 的“初始状态”?为什么这取决于这些 props 是来自父上下文还是 redux?
  • 我有一些数据从 Rails 服务器传递到父容器组件。我需要将此数据传递给子容器组件,然后再传递给哑视图。我是否只是使用发送的道具发送一个动作并更新初始的 redux 状态?但是,即便如此,我也必须将其传递给子容器。
  • 我收回最后一条语句,如果我确实将它作为 redux 状态的一部分进行更新,我不必将它传递下去。

标签: reactjs react-redux


【解决方案1】:

Redux 是否正在使用 Parent Container 中的数据(您说的数据是“来自 rails”的数据)?如果不是,那么这就是你真正的问题。 Redux 应该是反应容器的唯一且唯一的信息来源。反过来,Redux 应该接受来自 Rails 应用程序的信息并将该信息存储在其全局状态中。

一旦你实现了这一点,你现在就拥有了一个单一的事实来源,可以将所有信息输入到 React 容器中。

如果子组件需要任何信息,它应该从父容器的 redux 状态信息中接收它们。

可以嵌套子组件。只需继续将信息从一层向下传递到下一层。例如。 ContainerA 从redux 接收name,可以使用name={this.props.name} 渲染ComponentX,然后ComponentX 可以再次使用name={this.props.name} 渲染ComponentY。这导致 ComponentY 通过父组件和容器从 Redux 传递信息。

您的应用自然应该比容器拥有更多的组件。这是好事。组件本质上是可重用的,因为它们只与数据shape 而不是数据source 相关联。谨慎使用容器,并且仅在您想将特定信息插入到一系列组件中时才使用。

【讨论】:

  • 谢谢,这有帮助。当您说ContainerA, which receives name from redux 时,您的意思是通过getState() 接收它吗?我可能遗漏了一些东西,但我的印象是 mapStateFromProps 只有在分派操作时才会被触发。
  • 您应该使用mapStateFromProps,而不是手动从getState。你是对的,这只会在 dispatch 上触发,这反过来意味着你应该通过 dispatch 使用 rails 信息以将其存储在 Redux 中。取决于您从 Rails 中检索它的方式将决定您如何执行此操作,但目标应该是通过相同的数据流路由所有内容,这意味着所有传入数据都应该导致 redux 调度。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-07-07
  • 1970-01-01
  • 2016-10-13
  • 1970-01-01
  • 1970-01-01
  • 2017-05-15
相关资源
最近更新 更多