我有一个问题要使用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>;
};
答案 0 :(得分:2)
否,您不需要添加setStr
,因为它在组件的生存期内不会更改。但是添加它也不会造成太大危害,因为它不会改变。
注意
React保证
setState
功能标识是稳定的,并且不会在重新提供时更改。这就是为什么可以安全地从useEffect
或useCallback
依赖项列表中省略的原因。
但是您绝对应该删除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>;
};