我应该在useCallback的依赖项数组中包含setState吗?

ala*_*hoi 5 reactjs react-hooks

    const [active, setActive] = useState(false);

    const onActiveChanged = useCallback(
      isActive => () => {
        // do something
        setActive(isActive);
      },
      [setActive], // or just [] is okay?
    );
Run Code Online (Sandbox Code Playgroud)

一起使用useStateuseCallback(或useMemo)时,是否应将setState依赖项包括在数组中?

cbd*_*per 6

对此的建议也位于React Docs-Hooks API参考中

setState函数用于更新状态。它接受一个新的状态值并排队重新呈现组件。

setState(newState);

在后续重新渲染期间,useState返回的第一个值将始终是应用更新后的最新状态。

注意

React保证setState函数身份是稳定的,并且在重新渲染时不会改变。这就是为什么可以安全地从useEffect或useCallback依赖项列表中省略的原因。

  • 这个答案现在有点过时了,因为它引用了过时的文档。[新文档](https://react.dev/reference/react/useState)实际上并不保证setter会稳定,但这也许只是一个疏忽? (2认同)