javascript - 如何在 React 中设置要声明的对象数组?
问题描述
所以我在我的 node/express 后端进行 SQL 查询,并通过 JSON 将结果发送到我的 React 前端。我是 console.log 来查看我发送的信息,这似乎是有序的。但是,我似乎无法弄清楚如何将这个对象数组设置为我的状态。我收到此错误:
“对象作为 React 子对象无效(找到:带有键 {Title} 的对象)。如果您要呈现子对象集合,请改用数组。”
这是我正在使用的组件:
import React, { Component } from 'react'
export class ShoppingCart extends Component {
state = {
cartItems: ['Title 1']
};
displayCart = () => {
console.log('call it')
console.log('hello from displaycart');
fetch('http://localhost:5000/fillCart')
.then((res) => res.json())
.then((json) => {
this.setState(state => {
const cartItems = state.cartItems.concat(json.Title);
return {
cartItems
};
});
})
}
componentDidMount() {
this.displayCart();
}
render() {
return (
<div className="ShoppingCart">
<h3>This is your shopping cart</h3>
<ul>
{this.state.cartItems.map(item => (
<li key={item}>{item}</li>
))}
</ul>
</div>
)
}
}
export default ShoppingCart
我的目标是将 json.Title(现在包含多个标题)设置到我所在州的 cartItems State 数组中,然后通过 render() 在列表中显示每个标题。但是,我对如何实现这一点感到困惑。
此外,这是我从 Node/express 后端发送的 json 数据的样子:
[
RowDataPacket { Title: 'The Tragedy of The Korosko' },
RowDataPacket { Title: 'Two in the Far North' }
]
澄清一下,此时我的问题不是显示信息,而是首先将其设置为状态。任何建议肯定会受到赞赏!我已经坚持了好几天了。提前致谢!!!
解决方案
您需要从 json 响应中提取所有标题。
这是响应格式的样子:
{
Title: [{Title: ''}, {Title: ''}]
}
您的顶层json.Title
是一个包含对象的数组。
因此该.Title
属性不存在于 上json.Title
,而是存在于数组内的每个对象上。
我们可以使用map来提取我们需要的东西。
您的 setState 可能如下所示:
this.setState(state => {
// All titles in an array
const titles = json.Title.map(row => row.Title)
// Add to existing ones
const cartItems = state.cartItems.concat(titles);
return {
cartItems
};
});
推荐阅读
- javascript - Angular 6 按日期排序对象数组
- sql - 如果列重复,SQL 查询将停止工作
- regex - Perl 就地编辑:在 X12850 格式文件中查找和替换
- javascript - 如何创建一个将在页面刷新后工作的计时器循环?
- javascript - 如何使用linkedin API获取linkedin上个人资料的url
- java - 向 Android 布局添加圆角会留下白边
- google-chrome-extension - 谷歌浏览器扩展从站点的另一个页面获取 DOM
- python - 将 Python 标签的特定宽度设置为这么多像素长?
- angular-material - Angular Material Stepper 中的已完成属性似乎无法按预期工作
- python - python中两个数字之间的数组中的值