【发布时间】:2019-11-10 01:05:47
【问题描述】:
在 React documentation 对于钩子他们说:
“这还允许您使用本地处理乱序响应 效果内的变量"
useEffect(() => {
let ignore = false;
async function fetchProduct() {
const response = await fetch('http://myapi/product/' + productId);
const json = await response.json();
if (!ignore) setProduct(json);
}
fetchProduct();
return () => { ignore = true };
}, [productId]);
请通过解释帮助我更好地理解这一点:
- 为什么返回一个函数?
return () => { ignore = true }; - 本例中忽略了什么?
谢谢!
【问题讨论】:
-
忽略 API 响应。每当输入更改时,就会设置状态,因此 useEffect 会再次运行,从而调用新的 API 调用。为了忽略旧的 API 调用结果,
useEffect的返回函数将之前的 useEffect 局部变量设置为 false。这保证了唯一最后呈现的 useEffect( 以及随之触发的 API 调用) 及其结果被存储。 -
在medium.com/hackernoon/…这篇文章中,你可以看到为什么return () => { ignore = true };简而言之,就是避免竞争条件。
标签: reactjs ecmascript-6 react-hooks