如何渲染类型为对象数组的 React Hook 状态?

Posted

技术标签:

【中文标题】如何渲染类型为对象数组的 React Hook 状态?【英文标题】:How to render a React Hook State whose type is an Array of Objects? 【发布时间】:2020-01-20 18:27:30 【问题描述】:

我正在尝试渲染存储在 React Hook 状态中的对象数组,该状态存储电话簿的名称和号码:

const App = () => 
  const [ persons, setPersons] = useState([
     name: 'Arto Hellas', number: '000-000-0000' ,
     name: 'Ada Lovelace', number: '39-44-5323523' ,
     name: 'Dan Abramov', number: '12-43-234345' ,
     name: 'Mary Poppendieck', number: '39-23-6423122' 
  ]); 

  return (
    <div>
      <h2>Phonebook</h2>
      <div>persons</div>
    </div>
  )

但是我收到以下错误:

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

我尝试了以下方法:

我认为通过为数组的每个索引创建&lt;div&gt;,我可以单独渲染每个索引,而不是一次渲染整个数组,但这似乎不是问题。

const App = () => 
  const [ persons, setPersons] = useState([
     name: 'Arto Hellas', number: '000-000-0000' ,
     name: 'Ada Lovelace', number: '39-44-5323523' ,
     name: 'Dan Abramov', number: '12-43-234345' ,
     name: 'Mary Poppendieck', number: '39-23-6423122' 
  ]); 

  return (
    <div>
      <h2>Phonebook</h2>
      <div>persons.map(person => <div> person </div>)</div>
    </div>
  )

但是当我尝试这样做时,我会收到相同的错误消息。

如何渲染状态中的对象?

【问题讨论】:

【参考方案1】:

对象没有默认渲染器。您可以呈现对象的 JSON 序列化,例如 &lt;div&gt;JSON.stringify(persons)&lt;/div&gt;。但这可能不是您想要做的。

虽然上面的答案显示了如何展开和渲染嵌套对象,但您可能希望最终设置嵌套字段并操纵状态并有效地完成它。看看Hookstate,它是增压的 useState 钩子,它简化并加快了复杂/嵌套状态的管理。例如这里是类似的demo。 (免责声明:我是该项目的作者)

【讨论】:

【参考方案2】:

您仍在尝试渲染object。你需要访问它的properties

const App = () => 
  const [ persons, setPersons] = useState([
     name: 'Arto Hellas', number: '000-000-0000' ,
     name: 'Ada Lovelace', number: '39-44-5323523' ,
     name: 'Dan Abramov', number: '12-43-234345' ,
     name: 'Mary Poppendieck', number: '39-23-6423122' 
  ]); 

  return (
    <div>
      <h2>Phonebook</h2>
      <div>persons.map(person => <div key=person.name> person.name </div>)</div>
    </div>
  )

【讨论】:

谢谢,我明白了。为什么 React 不允许你直接渲染对象? object 应该如何在 html 元素中呈现?只有原语...您可以尝试 JSON.stringify() 呈现对象的字符串表示 @boxcarcoder 渲染器无法猜测复合类型应该如何显示。 我的措辞再好不过了

以上是关于如何渲染类型为对象数组的 React Hook 状态?的主要内容,如果未能解决你的问题,请参考以下文章

React:如何将 JSON 对象转换为数组并渲染它?

[react] 如何解决引用类型在pureComponent下修改值的时候,页面不渲染的问题?

如何在 React Native 应用程序中使用 React hook useEffect 为每 5 秒渲染设置间隔?

React Hook 功能组件防止重新渲染

如何在没有要映射的对象数组的情况下在 React.js 中循环和渲染元素?

条件渲染,使用超时 Invalid hook call React