React Hook API, мне нужно установить deps для SetStateAction? - PullRequest
0 голосов
/ 24 апреля 2019

У меня есть вопрос, чтобы использовать ответный крючок 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>;
};

1 Ответ

2 голосов
/ 24 апреля 2019

Нет, вам не нужно добавлять setStr, так как он не изменится в течение срока службы компонента.Но добавление его также не сильно вредно, поскольку оно не изменится.

Из useState реагирующих документов :

Примечание

React гарантирует, что идентификатор функции setState стабилен и не изменится при повторном рендеринге.Вот почему это безопасно исключить из списка зависимостей useEffect или useCallback.

Но вы обязательно должны удалить str.Состояние не должно обновляться в зависимости от текущего состояния, поскольку реагирует на несколько вызовов на setState.Это может привести к тому, что обновления будут происходить за короткий промежуток времени и будут потеряны.Вместо этого используйте версию обратного вызова setState:

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