【问题标题】:ReactJS: destructured variables of mapped array of objects is undefinedReactJS:对象映射数组的解构变量未定义
【发布时间】:2019-06-13 16:52:26
【问题描述】:

我正在尝试映射对象数组[{ingredient: '', quantity: ''}] 并通过解构从中获取属性,这就是代码

 <ul>
     {this.state.ingredients.map(({ ingredient, quantity }, k) => {
        return (
          <div key={k}>
            <li key={k}>{ingredient} - {quantity}</li><br />
          </div>
        )
     })}
 </ul>

成分和数量返回 undefined 即使它们在状态中有值,但也有一些东西,&lt;ul&gt; 中的 &lt;li&gt; 与对象数组的长度一样多。那么这怎么可能呢?有什么办法可以解决吗?

这是控制台日志记录:

这是记录 state.ingredients 的图像

这就是我从服务器获取原料的方式

 axios.get(`/api/recipe/${params.id}/${params.name}`)
    .then(res => res.data)
    .then(data=>{

        var jdata = JSON.parse(data.recipe)
        this.setState({
           ingredients: jdata.ingredients,
           ... other properties

        })
        console.log(jdata.ingredients)
    })

【问题讨论】:

  • 看起来不错,确保你有 ingredients 真的有 objects 包含所需的 keys
  • 就在return()之前,尝试console.log(this.state.ingredients),结果如何?另外,您有一个具有键的外部节点,而内部 li 元素不需要键。
  • @FurkanO 我做到了,它第一次记录了空数组,然后又记录了两次有效数组。不管数组中只有两个对象
  • 试试这个:this.state.ingredients.map((item, key) =&gt; ( &lt;span&gt;{item}&lt;/span&gt; )) remove additional {}
  • 没有提示状态如何从您当前的代码示例中获取其数据。因此,除非您使用与状态如何获取数据相关的代码来编辑您的问题,否则我们都无法帮助您。

标签: javascript arrays reactjs object


【解决方案1】:

从输出console.log(JSON.stringify(jdata.ingredients)),您的数组是数组数组,将您的数组数组转换为单个数组。

this.setState({
  ...
  ingredients: [].concat.apply([], jdata.ingredients),
  ...
})

const arrays = [[{"ingredient":"sdasd","quantity":"asdas"}],[{"ingredient":"asdasd","quantity":"dsd"}]]

const merged = [].concat.apply([], arrays);

console.log(merged)

【讨论】:

猜你喜欢
  • 2020-09-14
  • 1970-01-01
  • 1970-01-01
  • 2020-12-27
  • 2017-05-14
  • 2018-10-02
  • 1970-01-01
  • 2017-12-26
  • 1970-01-01
相关资源
最近更新 更多