javascript - TypeError:无法在反应 redux 中读取未定义的属性(读取“地图”)
问题描述
我正在尝试创建一个简单的 Web 应用程序,它使用 REACT REDUX 列出来自 fakestore api 的产品。但是反应抛出错误“TypeError:无法读取未定义的属性(读取'map')”。
productListing.jsx
import React, { useEffect } from 'react';
import axios from 'axios';
import { useDispatch, useSelector } from 'react-redux';
import { setProducts } from '../redux/actions/productActions';
import ProductComponent from './ProductComponent';
const ProductListing = () => {
// const products = useSelector((state) => state.allProducts.products);
const dispatch = useDispatch()
const fetchProducts = async () => {
const response = await axios
.get("https://fakestoreapi.com/products")
.catch((err) => {
console.log("Err: ", err);
});
dispatch(setProducts(response.data));
console.log(response.data)
};
useEffect(() => {
fetchProducts()
},[])
// console.log("Products :" , products)
return (
<div className="ui grid container">
<ProductComponent />
</div>
);
};
export default ProductListing;
上述组件负责从 fakestoreapi 调用 api 并更新 redux 存储。
在以下名为“productComponent.jsx”的组件中,我尝试使用 map 方法列出来自 redux 商店的产品,如下所示:
import React from 'react'
import { useSelector } from 'react-redux'
const ProductComponent = () => {
const pdts = useSelector((state) => state.allProducts.products);
// console.log(typeof(pdts))
console.log("Products",pdts)
const renderList = pdts.map((pdt) => {
// const { id, title, image, price, category } = pdt;
return(
<div className="four column wide" key={pdt.id}>
<div className="ui link cards">
<div className="card">
<div className="image">
<img src={pdt.image} alt={pdt.title} />
</div>
<div className="content">
<div className="header">{pdt.title}</div>
<div className="meta price">$ {pdt.price}</div>
<div className="meta">{pdt.category}</div>
</div>
</div>
</div>
</div>
)
})
return(
<>{renderList}</>
// <>gbdf</>
)
}
export default ProductComponent
但是 React 抛出以下错误: 错误图像
当我安慰产品对象时,它显示未定义。但是在我评论了渲染列表并再次控制了产品对象之后,它控制了两次,第一次是未定义的,第二次用值打印正确的对象。此时我取消了渲染列表的注释,现在反应列出了产品,但是当我再次重新加载页面时,它两次控制台未定义值。
解决方案
Pdts
在第一次渲染中未定义。因此无法映射。试试这个
pdts?.map()
它被称为可选链接。
推荐阅读
- pyspark - 在 Pyspark 中将列值扩展/分解为多行
- c++ - 为什么我的二进制文件无法打开?
- xamarin.android - Xamarin.Android:当应用程序进入后台时显示图像
- c++ - 如何在 Visual Studio C++ 代码中访问 vtk 库函数
- c++ - 如何设计一个仅在其中一个部分使用 CUDA 的库,以便其他部分在没有安装 CUDA 的情况下也可以工作?
- node.js - 我在 namecheap 上的 node.js 应用程序似乎在一段时间后冻结了,这可能吗?
- javascript - 为什么我得到 X.map() 不是 ReactJS 中的函数?
- spring-data-mongodb - Spring数据,按顺序创建mongo集合?
- c - 我如何能够在不交换或混合它们的情况下专门打印出数组中的偶数?
- attributes - 是否可以在 CleverMaps 的对象属性中使用多行文本?