未捕获的类型错误:无法读取未定义的属性“map”-React js
2021-01-07
351
我尝试通过传递索引使用 setState({index: index }) 设置新状态,但出现以下错误
“未捕获 TypeError:无法读取未定义的属性‘map’” 我正在使用 React Hooks,并且我还在使用箭头函数,我真的不明白发生了什么……
关于如何解决此问题有什么建议吗?
import { useState } from "react";
import "./App.css";
const App = () => {
const [state, setState] = useState({
products: [
{
_id: "1",
title: "Shoes",
src: [
"https://www.upsieutoc.com/images/2020/01/07/img2.png",
"https://www.upsieutoc.com/images/2020/01/07/img2.png",
],
},
],
index: 0,
});
const { products, index } = state;
console.log("index", index);
const handleTab = (index) => {
console.log("index", index);
setState({ index: index });
};
return (
<div className="App">
{products.map((item) => (
<div className="details" key={item._id}>
<div >
<img src={item.src[index]} alt="" />
</div>
<div>
<div className="thumb">
{item.src.map((img, indx) => (
<img
src={img}
alt="img"
key={indx}
onClick={() => handleTab(indx)}
/>
))}
</div>
</div>
</div>
))}
</div>
);
};
export default App;
2个回答
当你 setState({ index: index }) 时,它会删除状态中的产品属性。 然后改为执行
setState({ products, index: index })
Nghi Nguyen
2021-01-07
原因是您的产品状态在 handleTap 函数中被索引状态替换。如果不包含当前状态,useState 将用新状态替换当前状态。
最好将产品状态和索引状态分开。例如:
const [products, setProducts] = useState([
{
_id: "1",
title: "Shoes",
src: [
"https://www.upsieutoc.com/images/2020/01/07/img2.png",
"https://www.upsieutoc.com/images/2020/01/07/img2.png",
],
},
])
const [index, setIndex]= useState(0);
然后在您的 handleTab 函数中只需调用 setIndex 即可更新索引
Ari Firmanto
2021-01-07