javascript - React Hook API,我是否需要为 SetStateAction 设置依赖?

标签 javascript reactjs react-hooks

我有一个使用react hook api的问题

const Example: FC = (props) => {
    const [str, setStr] = useState('example');
    const onClickCb = useCallback(() => {
        setStr(str + '_');
    }, [str, setStr]); // should I need watch setStr?
    return <button onClick={onClickCb}>{str}</button>;
};

最佳答案

不,您不需要添加setStr,因为它在组件的生命周期内不会改变。但添加它也没有太大坏处,因为它不会改变。

来自useState react docs :

Note

React guarantees that setState function identity is stable and won’t change on re-renders. This is why it’s safe to omit from the useEffect or useCallback dependency list.

但是你绝对应该删除str。不应根据当前状态将状态更新为 react may batch multiple calls to setState 。这可能会导致短时间内发生的更新丢失。而是使用 setState 的回调版本:

const Example: FC = (props) => {
    const [str, setStr] = useState('example');
    const onClickCb = useCallback(() => setStr(current => `${current}_`)), []);
    return <button onClick={onClickCb}>{str}</button>;
};

关于javascript - React Hook API,我是否需要为 SetStateAction 设置依赖?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55825495/

相关文章:

Javascript:大括号中数组后的括号

JavaScript - 找出一个数字均匀地进入另一个数字的次数

reactjs - 如何在 python 中使用 selenium webdriver 将内容设置到 mui-rte 中?

sql - node.js 登录无法使用 azure sql 数据库

reactjs - 明智地排除这个 useEffect 依赖数组变量吗? lint 推荐 3,但我只想依赖 1

reactjs - 如何使用 Hooks API 在 React 中避免不必要的渲染

javascript - 任何 Firefox/Webkit 的 contenteditable 帮助插件?

javascript - React - 动态表中的 OnChange 调用会产生 Uncaught TypeError

javascript - 似乎无法正确地将函数转换为异步

reactjs - useRef() 的钩子(Hook)调用无效