【问题标题】:Unable to pass array of objects from parent to Child component无法将对象数组从父组件传递到子组件
【发布时间】:2019-09-12 01:03:21
【问题描述】:

我正在尝试将对象数组(最终将替换为实际数据的 axios 调用)从父组件传递到子组件,并进一步从一个子组件传递到其他子组件,我无法传递,因为我收到错误消息“对象作为 React 子级无效(找到:带键的对象)。如果您要渲染子级集合,请改用数组。”

/ABC.js

import React from 'react'
import ABCD from '../ABCD/ABCD'

const plans = [
  {
    id:'1',
    title:'option 1',
    value:'option1',
    name:'option'
  },
  {
    id:'2',
    title:'option 2',
    value:'option2',
    name:'option'
  }
]
const ABC = () => {
  return (
    <div>
      {
        plans.map( plan => {
          return(
            <ABCD data={plan} />
           );
        })
     }
    </div>

  );
}

export default ABC

//ABCD.JS

import React from 'react'

const ABCD = ({data}) => {
  return (
    <div>
      {data} //Here as of now data is being used , will be replaced by other child components 
    </div>
  );
}

export default ABCD

预期的结果应该是对象数组的显示,但实际输出是错误消息“对象作为 React 子项无效(找到:带有键 {id、title、value、name} 的对象)。如果你旨在渲染一组子项,请改用数组。”

【问题讨论】:

  • 这是因为数据是一个对象?您需要将其呈现为字符串吗?然后先解析成json
  • @keysl 如果我想通过 stringify 将整个数据显示为字符串可以使用它,但是如果我想使用获得的数据发送到下一个子组件,则可以发送整个数据?
  • @devserkan 不完全,我之前看过这个问题,我想进一步将道具发送给其他子组件。
  • @nishant 如果您将其发送到子组件,它将起作用,错误来自您访问对象的方式

标签: javascript reactjs ecmascript-6


【解决方案1】:

如果您想再次将数据发送给任何子组件,请执行与在父组件中相同的操作。只是要小心渲染对象。你不能直接渲染对象,你得到的错误很清楚。您需要以某种方式呈现对象的属性。

const plans = [
  {
    id:'1',
    title:'option 1',
    value:'option1',
    name:'option'
  },
  {
    id:'2',
    title:'option 2',
    value:'option2',
    name:'option'
  }
]
const ABC = () => {
  return (
    <div>
      {
        plans.map( plan => {
          return(
            <ABCD data={plan} />
           );
        })
     }
    </div>

  );
}

const ABCD = ({data}) => {
  return (
    <div>
      <SecondChild data={data} />
      <ThirdChild value={data.value} />
    </div>
  );
}

const SecondChild = ({ data }) => 
  <div>{data.id}</div>
  
const ThirdChild = ({ value }) =>
  <div>{value}</div>

ReactDOM.render(<ABC />, document.getElementById("root"));
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/16.6.3/umd/react.production.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react-dom/16.6.3/umd/react-dom.production.min.js"></script>
<div id="root" />

【讨论】:

【解决方案2】:

data 是一个对象,你不能渲染它,因为它不是一个有效的React Element

所以,在这种情况下&lt;div&gt;{data}&lt;/div&gt;,这将不起作用。

而是简单地做,

{
   data.map((dataObject)=><div>{dataObject.name}</div>)
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-01-01
    • 2016-12-16
    • 1970-01-01
    • 2021-02-22
    • 2018-11-26
    • 2019-10-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多