React useState的setter是否过时?

时间:2020-06-27 11:50:16

标签: javascript reactjs react-hooks

我正在使用全局事件处理程序。为了避免每次状态更改时都分离/重新附加事件处理程序,我使用带有强制更新的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版本是否安全?如果没有,这可能导致什么问题?

1 个答案:

答案 0 :(得分:1)

像这样使用过时的useState版本是否安全?

是的,这就是使用钩子实现this.forceUpdate的方式。

通常,您会看到类似的内容:

// forceRender();
const [, forceRender] = useReducer((p) => !p, false);

它甚至在react-redux source code中使用。