javascript - React js将对象转换为数组以供useState
问题描述
再会!我正在为我的投资组合编写一个网上商店演示。我正在使用 commerce.js 作为后端。当我尝试从商业中获取数据时,问题就来了。它是对映射无效的对象的形式。我尝试了许多将其转换为数组的方法,但没有用。
这是我的 App.js
const App = () => {
const [products, setProducts] = useState([]);
const fetchProducts = async () => {
const { data } = await commerce.products.list();
//setProducts(data);
console.log(Object.entries(data));
//Tried Using Object.values and Object.entries but no use.
};
useEffect(() => {
fetchProducts();
}, []);
取消注释时setProducts
,Reactjs 会抛出一个错误,即对象作为反应子无效。
这是我的控制台的样子:
这是使用此数据的产品组件
const Product = ({ product }) => {
//console.log(product);
const classes = useStyles();
return (
<Card className={classes.root}>
<CardMedia
className={classes.media}
image={product.media}
title={product.name}
/>
<CardContent>
<div className={classes.cardContent}>
<Typography variant="h5" gutterBottom>
{product.name}
</Typography>
<Typography variant="h5">{product.price}</Typography>
</div>
<Typography variant="body2" color="textSecondary">
{product.description}
</Typography>
</CardContent>
<CardActions disableSpacing className={classes.cardActions}>
<IconButton aria-label="Add to Cart">
<AddShoppingCart />
</IconButton>
</CardActions>
</Card>
);
};
解决方案
product.price
是一个对象,所以你不能只用它作为一个反应孩子:)
我指的是这一行:
<Typography variant="h5">{product.price}</Typography>
如果您只是将其更改为
<Typography variant="h5">{product.price.formatted}</Typography>
应该没问题
推荐阅读
- mysql - 触发器 - 如何在更新另一列时更改另一列 - MySQL
- unit-testing - CMake:将测试与构建目录中的库链接,而不是与已安装的版本
- javascript - 如何通过反应将数据从子级发送到父级?
- python - 如何捕获不是由 warnings.warn 生成的警告
- docker - Dockerfile、docker-compose 和 swarm 模式生命周期
- python-3.x - 如何刷新 Trimesh(Pyglet)查看器以查看我的网格(stl)旋转并在角度条件后中断此可视化?
- json - 使用 webpack 将 YAML 预编译为 JSON
- symfony - Symfony3.4 表单错误呈现两次
- python - 使用请求将 cURL 命令转换为 python
- vue.js - Vue 组件在第二次访问时未呈现