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不会提示..

0
0

React17+Hook+TS4 优质实践,仿 Jira 企业级项目

解锁 React17 高阶用法,轻松应对大型复杂长周期项目

2691 学习 · 1236 问题

查看课程