当前位置: 首页 > 面试题库 >

使用Connect或将数据作为道具传递给子级

顾超
2023-03-14
问题内容

我是新来的反应者和救赎者。我有一个这样的嵌套组件的场景。

A> B> C> D

A组件中使用了一个属性,D组件中将使用它。因此,我有两种方法:

  1. 从组件A的redux存储中获取状态,然后将其作为道具传递给所有它的子组件,即使它仅在D组件中使用。
  2. 我应该连接到组件D中的redux存储,然后从那里获取该属性。

正确的方法是什么?


问题答案:

正如redux的作者Dan Abramov在 本期中 所说

将道具传递给子级或将其连接到商店的两种方法都是合适的,但是嵌套connect()
组件实际上可以为您带来更高的性能。不利的一面是它们与应用程序的耦合程度更高,并且测试起来也更加困难,但这可能不是一个大问题。

他还明确指出了在
reddit
上应遵循的良好经验法则


我这样做:

  • 首先使用一个容器和几个演示组件
  • 随着表示性组件树的增长,“中间”组件开始传递过多的道具
  • 此时,我将一些叶子组件包装到容器中,以便“中间”组件不需要接受和传递与它们完全无关的道具
  • 重复

他甚至对此 发表了推文

尝试使演示文稿组件分开。通过在方便时连接它们来创建容器组件。每当您想在父组件中复制代码以提供相同种类的子代的数据时,就需要提取容器。

简单来说:

您可以connect()在任何级别使用。这样做使组件变得智能,因为它知道其道具来自何处。一个哑巴组件只有道具,它们可以来自任何地方。一个智能组件耦合到redux。愚蠢的组件不是。

更新:react-redux v7及更高版本

同样的概念也适用useSelectors。如果多个子组件使用相同的数据,则可以在容器组件中接收数据并传递到表示性组件

但是,如果子级使用的数据不同,则可以选择useSelector在子级组件中单独使用。这样可以确保仅重新渲染那些实际需要



 类似资料:
  • 问题内容: 我有一个对象,其中包含多个通用键值道具,我想将它们传递给一些jsx。像这样: 我希望这可以作为传递单个道具的功能: 这可能吗? 问题答案: 这可能吗? 是的,为什么您认为不可能,但是发送方式不正确。 的含义是: 因此,如果您默认不指定任何值,它将采用。要传递对象,您需要这样编写: 更新: 如果您有一个对象,并且希望将所有属性作为单独的属性传递,则将其编写为:

  • 我使用的是dev-express中的react-grid库,库中有一个表组件,我们可以向它传递单元格组件,在CustomCell中,我使用的是Material UI中的菜单 在上述情况下,菜单工作良好, 但是我想要传递道具到这个组件,我尝试了以下操作 在这种情况下菜单不工作,我想知道是否有一个替代的方法来实现第二种情况。

  • 问题内容: 在组件中,我需要将函数的返回值传递给属性。然后从属性需要被传递到的组件。新来的反应。不确定如何将属性从子级传递到组件。 问题答案: 您可以将函数从父级传递给子级,子级可以使用颜色调用该函数(很多操作都类似于事件处理程序)。在App中收到颜色后,使用.setState()将其分配给状态值,然后将其在render()中获取

  • 问题内容: 我正在尝试将现有的react-router 3.0.0应用程序迁移到4.0.0。在路由器内,我需要传递与其子代无关的其他非路由选择。 在早期版本的react- router中,有一些技巧性的方法可以实现此目的,本文对此进行了详细介绍。我个人最喜欢的是使用的这种方法,因为它可以确保复制所有的react-router道具: 到目前为止,我的新App组件如下所示: 在保留提供的路由器道具的同

  • 问题内容: 可以说我有: 在Tabs组件内部,具有属性 儿童[0](this.props.children)看起来像 儿童[0]。道具看起来像 最终,Children对象看起来像(这是我想要传递的): 问题是这样,如果我这样重写MultiTab 在选项卡组件内部 看起来和上面一样。 好像 我希望该物业看起来像。上面只是打印出Statement函数。 这是一个很奇怪的问题,但是长话短说,我正在使用一

  • 问题内容: 我试图找到定义可以以一般方式使用的组件的正确方法: 当然,可以想象并在父组件和子组件之间进行渲染的逻辑。 对于这个问题,这是一个虚拟的实现: 问题是,每当您用于定义包装器组件时,如何将某些属性传递给其所有子组件? 问题答案: 用新道具克隆Children 您可以使用React.Children遍历子级,然后使用React.cloneElement使用新的道具(浅合并)克隆每个元素,例如