我遇到过一种情况,我不得不使用当前值进行进一步处理,并且不能依靠依赖项及时更新函数。我不得不做类似于以下内容的事情。
const [values, setValues] = useState({});
const someCallback = useCallback(() => {
setValues((values) => {
if(values.x === 'something') return ({ ...values, x: 'something else' });
return values;
});
}, []);
它对我有用,但这并不意味着它的权利。我从未见过有人像上面这样使用它,但我看不出上面有什么问题。像这样使用 useState 的 set 参数有什么缺点吗?
我认为它没有任何问题。您已经声明没有依赖项,这是正确的,因为您使用的是setValues
的回调版本(并且setValues
本身保证是稳定的(。
为了清楚起见,我可能会做的一件小事,这更像是一种风格,可以双向争论,我可能会对setValues
回调的values
参数使用不同的名称:
const [values, setValues] = useState({});
const someCallback = useCallback(() => {
setValues((currentValues) => {
if(currentValues.x === 'something') return ({ ...currentValues, x: 'something else' });
return currentValues;
});
}, []);
但同样,你所拥有的似乎很好。