Rax防内存泄漏自定义hooks

569 阅读1分钟

Rax

跨端框架:官网

写法跟react没差

常见错误

image.png

这是由于存在异步更新组件而导致的问题,由于上个页面销毁了,setState并没有停止

解决方案

自己写了一个自定义hooks,用来替换useState;直接上代码:

import { useState } from 'rax';
import useMountedState from 'rax-use-mounted-state';

function useSafeState(initialState) {
  const isMounted = useMountedState();
  const [state, setState] = useState(initialState);
  const setCurrentState = (currentState) => {
    /** 如果组件已经卸载则不再更新 state */
    isMounted() && setState(currentState);
  };

  return [state, setCurrentState] as const;
}

export default useSafeState;

//像useState一样使用即可