(ReactJS)未捕获的类型错误:无法读取未定义的属性(读取“map”)
2023-03-19
183
未捕获的类型错误:无法读取未定义的属性(读取“map”)
import React, { useState } from "react";
import products from '../products'
function RecScreen() {
const [budget, setBudget] = useState(products);
const [items, setParts] = useState([]);
const handleInputChange = (event) => {
setBudget(event.target.value);
};
const handleSubmit = async (event) => {
event.preventDefault();
const response = await fetch(`/api/products?price=${budget}`);
const data = await response.json();
setParts(data.product);
};
return (
<div>
<h1>PC Parts Recommender</h1>
<form onSubmit={handleSubmit}>
<label>
Enter your budget:
<input type="number" value={budget} onChange={handleInputChange} />
</label>
<button className='btn btn-warning rounded ms-1' type="submit">Recommend Parts</button>
</form>
<ul>
{items.map(product => (
<li key={product.id}>{product.name} - ${product.price}</li>
))}
</ul>
</div>
);
}
export default RecScreen;
React 代码 在此代码中,用户输入预算并推荐 PC 部件,但它没有显示任何内容并给出此 未捕获的类型错误:无法读取未定义的属性(读取“map”)
2个回答
这里的问题是,属性
product
在对象
data
中不存在,但是您正在使用
data.product
更新状态
items
,而
data.product
是
undefined
,因此当您尝试使用
items.map
通过
items
进行映射时,您正在尝试通过
undefined
值进行映射
要处理此问题,请使用此代码:
const handleSubmit = async (event) => {
event.preventDefault();
const response = await fetch(`/api/products?price=${budget}`);
const data = await response.json();
console.log(data) // see what your data object looks like
if(data?.product){ // make this condition to only update the state when data exist and data.product exists
setParts(data.product);
}
};
Ahmed Sbai
2023-03-19
如果 data.product 具有虚假值,则在这种情况下它将抛出此错误,您可以像这样修改此函数
const handleSubmit = async (event) => {
event.preventDefault();
const response = await fetch(`/api/products?price=${budget}`);
const data = await response.json();
setParts(data.product || []);
};
pinku kumar
2023-03-21