useMountedRef 如果使用 useState 代替 useRef 为什么会一直显示加载中
来源:10-1 useCallback应用,优化异步请求

weibo_我叫风中追风13_0
2021-02-26
声明 useMountedRef 的 diff
export const useMountedRef = () => {
- const mountedRef = useRef(false);
+ const [mounted, setMounted] = useState(false);
useEffect(() => {
- mountedRef.current = true;
+ setMounted(true)
return () => {
- mountedRef.current = false;
+ setMounted(false)
};
});
- return mountedRef;
+ return mounted;
};
使用 useMountedRef 的 diff
- const mountedRef = useMountedRef();
+ const mounted = useMountedRef();
...
- if (mountedRef.current) setData(data);
+ if (mounted) setData(data);
老师,假设我使用 useState 代替 useRef ,会显示一直加载 ui,但是我不明白为什么会这样,麻烦老师解答一下下
写回答
1回答
-
Nolan
2021-02-27
用useState的话,就对依赖的准确性要求比较高了,
找到 auth-context,把
useMount(() => { run(bootstrapUser()); });
改成
useEffect(() => { run(bootstrapUser()); }, [run]);
就可以了
话说通过这里的例子发现useMount是有个缺点的,那就是如果少了依赖eslint不会提示..
00
相似问题