【发布时间】:2021-07-09 10:42:05
【问题描述】:
我有一个从 API 获取数据以向用户显示一些详细信息的组件:
const ItemDetail = ({match}) => {
const [item, setItem] = useState(null);
useEffect(() => {
const abort = new AbortController();
fetchItem(abort);
return function cleanUp(){
abort.abort();
}
},[]);
const fetchItem = async (abort) => {
const data = await fetch(`https://fortnite-api.theapinetwork.com/item/get?id=${match.params.id}`, {
signal: abort.signal
});
const fetchedItem = await data.json();
setItem(fetchedItem.data.item);
}
return (
<h1 className="title">{item.name}</h1>
);
}
export default ItemDetail;
但是当导航到达这个组件时,控制台显示错误Cannot access name of undefined,可能是因为状态还没有更新。
检查item并在它尚未更新时返回null是否正确?像这样的:
if(!item) return null;
return (
<h1 className="title">{item.name}</h1>
);
或者在这种情况下,最好使用由 React.Component 扩展的类并正确处理其生命周期?
【问题讨论】:
-
这不是真正的钩子问题,就好像你在类组件中做了同样的事情 (state = {item:null)} 你的应用程序会返回同样的错误。
-
那么,即使使用类并在 componentDidMount() 中获取数据,在 render() 阶段仍然有可能状态不是最新的吗?
-
@FelipeSantana - 是的。类组件总是在挂载时呈现。
标签: javascript reactjs react-hooks