useEffect(() => {
if (location.state?.product) {
setProduct(location.state.product);
} else if (id && !hasFetched.current) {
hasFetched.current = true;
fetchProductById(id);
}
}, [id, setProduct, fetchProductById, location.state]);
确保在缺失时获取产品。 添加控制台。跟踪(产品,“产品产品组件”);
TROCE确认产品在最初渲染完成之前已未定义。
预期的行为
在新标签或刷新的产品页面打开产品页面时,应在不崩溃的情况下正确获取产品。 NAVLINK只能在可用产品数据后渲染。 实现行为如果渲染时缺少产品,则product.Category.ID查找失败。 在获取完成之前,出现错误,打破页面。
在反应中,总是有第一个渲染循环在执行之前,在此期间(在这种情况下)
UseEffect()
product
或null
为了防止这引起问题,您可以在渲染中放置一个“警卫”,例如:
undefined
{product
? <NavLink ...>...</NavLink>
: null
}