当前位置: 首页 > 知识库问答 >
问题:

反应.js - 当从父级传播 .map 的结果时,此 .props.子对象

章茂
2023-03-14

我有一些奇怪的行为,当我从父母传播.map()的结果时,这个.props.kids正在转换为一个对象

例子:

const items = [
  { id: 1, name: "Name1" },
  { id: 2, name: "Name2" }
].map((item) => {
  return (
    <DropdownMenu_listItem key={item.id} item={item} />
  );
});

render() {
  return (
    <DropdownMenu
      label={'Some label'}
      onChange={() => {}}
    >
      {...items}
    </DropdownMenu>
  );
}

// DropdownMenu.js

render() {
  console.log(this.props.children); // {0: {…}, 1: {…}}

  return (
    // ...
  );
}

奇怪的是,当我省略. map()并直接传递元素时,它们在this.props.children中显示为预期的数组:

render() {
  return (
    <DropdownMenu
      label={'Some label'}
      onChange={() => {}}
    >
      <DropdownMenu_listItem item={{...}} />
      <DropdownMenu_listItem item={{...}} />
    </DropdownMenu>
  );
}

// DropdownMenu.js

render() {
  console.log(this.props.children); // [{…}, {…}]

  return (
    // ...
  );
}

如果能深入了解为什么会发生这种情况,我们将不胜感激。

共有3个答案

太叔昊穹
2023-03-14

在我的情况下,作为attr将起作用

以前

function Foo(props) {
    return <Bar> {...props} </Bar>
}

之后

function Foo(props) {
    return <Bar {...props}> </Bar>
}
那弘
2023-03-14

{… item}DropdownMenu.js中作为子级传递。

它可以作为this.props.children

这个.props.子可以是数组或对象,这取决于你如何渲染子元素。

就你而言

<DropdownMenu
      label={'Some label'}
      onChange={() => {}}
    >
      {...items}
</DropdownMenu>

项是一个数组。正如我们所知

array is also type of object in javascript

with key equal to element's index and value is element itself

{… item}:这将作为对象传递,键作为元素索引,值等于数组元素。

要解决您的问题,您应该不使用spread运算符来传递它。

< code>{items}:这将作为数组传递。

<DropdownMenu
      label={'Some label'}
      onChange={() => {}}
    >
      {items}
</DropdownMenu>
轩辕弘雅
2023-03-14

这并不是因为地图,你得到的孩子作为对象,而是因为你使用的项目蔓延运营商

<DropdownMenu
          label={'Some label'}
          onChange={() => {}}
        >
          {...items} {/*spread operator here */}
</DropdownMenu>

既然map项目之后是一个使用{… item}的数组,因为您使用{}包装扩展运算符的结果,如果您编写{item},那就可以了

 <DropdownMenu
      label={'Some label'}
      onChange={() => {}}
    >
      {items}
 </DropdownMenu>
 类似资料:
  • 我在React中有一个名为“app”的父组件,它用HighCharts实现呈现一个“卡路里”子组件。 以下是我的完整代码: 谁能帮我做错了什么?

  • 因此,我想向附加到组件的任何子级添加某些样式。假设父组件称为,子组件称为。在我正在尝试以下方法:- 上述方法对我不起作用。我想知道为什么。还有没有一种方法可以让我在孩子们之间绘制地图,并将他们包装在一个新的组件中?像这样的东西;

  • 问题内容: 通过回调函数将数据从子级传递到父级组件,但是不起作用。我在这里做错了什么?将数据从子级传递到父级组件-反应-通过回调函数 https://codepen.io/silentarrowz/pen/GEMQEP?editors=0010 这是代码 问题答案: 有几个问题。 1)你必须绑定 2)是异步的,因此不能保证在传递给时将其设置为所需的值。你可以做 要么 解决该问题。

  • 我正在尝试设置一个使用React的页面。该页面有一个下拉菜单组件,它应该触发父级中的状态更新。我尝试了以下几个例子,但没有任何效果。以下是我尝试过的两种方法的简化示例: > 将回调作为更新父状态的道具传递给子节点: }); 这始终显示“失败”,而不是“1”或“2”。 让父级使用onChange而不是回调获取下拉菜单的值。 }); }); 如果我尝试渲染状态,我可以在下拉组件中看到状态更改,但父级没

  • 我正在使用 VUE JS,我想有一组复选框,如下所示。当有人单击主复选框时,应选中该复选框下的所有复选框。请找到附图供您参考 为了实现这个场景,我使用了两个主要组件。当有人单击某个组件时,我将该组件添加到selectedStreams数组。所选流数组结构类似于下面的结构 当我单击标题复选框时,我正在触发功能 单击全部并尝试更改选定的流[keyv]。 但此操作不会触发子组件,并自动选中该复选框。 我

  • 问题内容: 我有两个组成部分: 第一个是父组件,它是通常的React组件。 第二个是孩子,它是功能组件。 我想将 Titles 的值(处于子状态)传递给父Component。这是我的 子组件 代码: 这是我的 父组件 : 这看起来很容易,但这是我第一次使用功能组件。你能帮我吗 ? 问题答案: React就是关于在组件树中向下流动的数据。如果您希望能够显示和/或修改彼此之间的共享状态,则应提升状态并