错误:对象作为 React 子项无效(找到:带有键 的对象)。改用数组

Posted

技术标签:

【中文标题】错误:对象作为 React 子项无效(找到:带有键 的对象)。改用数组【英文标题】:Error: Objects are not valid as a React child (found: object with keys ). use an array instead错误:对象作为 React 子项无效(找到:带有键 的对象)。改用数组 【发布时间】:2021-05-20 19:56:31 【问题描述】:

我将表单值传递给 myDoc 组件,但它显示 Object 作为 React 子级无效,我是 React 的初学者 错误:对象作为 React 子项无效(找到:带有键 的对象)。如果您打算渲染一组子项,请改用数组。

import React,useState from 'react'
import 
  PDFDownloadLink,
  Page,
  Text,
  View,
  Document,
  StyleSheet,
 from '@react-pdf/renderer'

const styles = StyleSheet.create(
  page: 
    flexDirection: 'row',
    backgroundColor: '#E4E4E4',
  ,
  section: 
    margin: 10,
    padding: 10,
    flexGrow: 1,
  ,
) 

MyDoc 组件

const MyDoc = (name) => (
  <Document>
    <Page size="A4" style=styles.page>
      <View style=styles.section>
        <Text>name</Text>
      </View>
      <View style=styles.section>
        <Text>Section #2</Text>
      </View>
    </Page>
  </Document>
) 

编辑组件


const Edit = () => 

    const [name, setName] = useState('')
  const [email, setEmail] = useState('')
  const [about, setAbout] = useState('')

  return (
    <div className="EditScreen">
      <form>
        <input
          type="text"
          value=name
          placeholder="Name"
          onChange=(e) => setName(e.target.value)
        ></input>
        <br></br>
        <input
          type="text"
          value=email
          placeholder="Name"
          onChange=(e) => setEmail(e.target.value)
        ></input>
        <br></br>
        <input
          type="text"
          value=about
          placeholder="Name"
          onChange=(e) => setAbout(e.target.value)
        ></input>
        <br></br>
        <button type="submit">Submit</button>
      </form>

在此处传递名称道具

      <PDFDownloadLink document=<MyDoc name=name /> fileName="somename.pdf">
        ( blob, url, loading, error ) =>
          loading ? 'Loading document...' : 'Download now!'
        
      </PDFDownloadLink>
    </div>
  )


export default Edit ```

【问题讨论】:

【参考方案1】:

React 会将 props 对象传递给您的组件,因此您需要对其进行解构以获取各个属性。所以把你的代码改成:

const MyDoc = (name) => (
  <Document>
    <Page size="A4" style=styles.page>
      <View style=styles.section>
        <Text>name</Text>
      </View>
      <View style=styles.section>
        <Text>Section #2</Text>
      </View>
    </Page>
  </Document>
) 

注意const MyDoc = (name) =&gt; ( 部分。

另一种方法是...

const MyDoc = (props) => (
...

然后像这样访问name 属性:

<Text>props.name</Text>

【讨论】:

感谢您抽出时间来概述我的问题,现在可以正常工作了。我通过你的回答理解了道具的概念。【参考方案2】:

将该对象字符串化

这可能不是此处发布的特定问题的答案,但相关(相同的错误消息)。

在我的例子中,我在两个地方显示我的状态:一个是原始 JSON 数据,另一个是表格,其中 JSON 的属性是名称/值对的行。

问题是当我实现表格视图部分时,我忘记修改原始 JSON 显示。

在我实现表格之前,我是这样设置状态的: setMyData(JSON.stringify(jsonData, null, 2))

然后我将其替换为(在将上面的 jsonData 转换为数组之后): setMyData(propsArray)

同时,我仍然显示原来的myData 状态,如下所示: &lt;pre&gt;myData&lt;/pre&gt;

...这意味着它试图渲染 Array 对象,而之前它只是渲染 JSON 字符串化,因为我在设置它之前对其进行了字符串化。

因此,在对错误的事情进行了数小时的故障排除后,我意识到我只需要像这样将该对象(新的属性数组)字符串化: &lt;pre&gt;JSON.stringify(myData, null, 2)&lt;/pre&gt;

...这就是我之前所做的(在设置状态之前进行字符串化)。这不是我第一次这样做,但希望通过发布这将是我的最后一次,也希望是你的。

【讨论】:

以上是关于错误:对象作为 React 子项无效(找到:带有键 的对象)。改用数组的主要内容,如果未能解决你的问题,请参考以下文章

错误:对象作为 React 子对象无效(找到:带有键 low, high 的对象)

尝试在反应中映射数据时出现错误。对象作为 React 子对象无效(找到:带有键 children 的对象),我该如何解决?

对象作为 React Child 无效(找到:带有键 id,name 的对象)

对象作为 React 子对象无效。如果您打算渲染一组子项,请改用数组 - 错误 Solidity - React

对象作为 React 子对象无效(找到:带有键 job 的对象)。如果您打算渲染一组孩子,请改用数组

对象作为 React 子代无效(在 Internet Explorer 11 中用于 React 15.4.1)