Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 是否使用状态';谁的二传手会发霉?_Javascript_Reactjs_React Hooks - Fatal编程技术网

Javascript 是否使用状态';谁的二传手会发霉?

Javascript 是否使用状态';谁的二传手会发霉?,javascript,reactjs,react-hooks,Javascript,Reactjs,React Hooks,我正在使用全局事件处理程序。为了避免在每次状态更改时分离/重新附加事件处理程序,我使用带有强制更新的ref: const ref = useRef(); const forceUpdate = useState()[1]; const handlePopState = (event) => { ref.current = { ...ref.current, foo: event.foo, }; forceUpdate();

我正在使用全局事件处理程序。为了避免在每次状态更改时分离/重新附加事件处理程序,我使用带有强制更新的ref:

  const ref = useRef();
  const forceUpdate = useState()[1];

  const handlePopState = (event) => {
    ref.current = {
      ...ref.current,
      foo: event.foo,
    };
    forceUpdate();
  };

  useEffect(() => {
    window.addEventListener('popstate', handlePopState);

    return () => {
      window.removeEventListener('popstate', handlePopState);
    };
  }, []);
我很惊讶这真的有效。从技术上讲,
forceUpdate
使用的是
useState
的setter的旧版本,但这似乎不会导致错误

像这样使用过时版本的
useState
安全吗?如果不是,这会导致什么问题

像这样使用过时版本的
useState
安全吗

是的,这就是如何使用钩子实现this.forceUpdate的方法

通常,您会看到如下内容:

// forceRender();
const [, forceRender] = useReducer((p) => !p, false);
它甚至还被用在汽车上