【发布时间】:2021-10-11 17:44:49
【问题描述】:
我的项目正在使用 useState 和 useEffect 挂钩从 API 获取数据。该请求在我的本地主机上正常工作和呈现,但我收到以下警告:
React Hook useEffect 缺少一个依赖项:'fetchData'。要么包含它,要么移除依赖数组。
警告阻止我部署我的项目。我已经尝试将“fetchData”添加到数组以及完全删除数组。两者都会导致错误。
将 'fetchData' 添加到数组会导致另一个警告:
'fetchData' 函数使 useEffect Hook(第 31 行)的依赖关系在每次渲染时都发生变化。将它移到 useEffect 回调中。或者,将 'fetchData' 的定义包装在它自己的 useCallback() Hook 中。
删除数组会导致此控制台错误:
CORS 策略阻止了从源“http://localhost:3000”获取的访问权限:请求的资源上不存在“Access-Control-Allow-Origin”标头。如果不透明的响应满足您的需求,请将请求的模式设置为“no-cors”以获取禁用 CORS 的资源。
我只需要在加载时渲染一次状态。这是我的代码:
export function Product({Inventory_ID, Cost}) {
const [ data, setData ] = useState("");
const [ centers, setCenters ] = useState([]);
const fetchData = async () => {
try {
const response = await fetch(`${API_ENDPOINT}${Inventory_ID}`, REQUEST_OPTIONS);
const data = await response.json();
setData(data);
const centers = await data.fulfillable_quantity_by_fulfillment_center;
setCenters(centers);
} catch (e) {
console.error(e);
}
}
useEffect(() => {
fetchData();
}, []);
// Currency formatter
const formatter = new Intl.NumberFormat('en-US', {
style: 'currency',
currency: 'USD',
maximumFractionDigits: 0,
})
return (
<div className="card">
<h2>{data.name}</h2>
<h3>Total Onhand Quantity</h3>
<p>{data.total_onhand_quantity}</p>
<h3>Total Onhand Value</h3>
<p>{formatter.format(data.total_onhand_quantity * Cost)}</p>
<h3>Quantity by Fulfillment Center</h3>
{centers.map((center) => {
return (
<div>
<h4 key={center.name}>{center.name}</h4>
<p key={center.onhand_quantity}>{`Onhand Quantity: ${center.onhand_quantity}`}</p>
<p key={center.awaiting_quantity}>{`Awaiting Quantity: ${center.awaiting_quantity}`}</p>
</div>
);
})}
<div>
</div>
</div>
)
}
知道我在哪里出错以及如何解决吗?
非常感谢。
【问题讨论】:
标签: reactjs react-hooks use-effect