当我不得不使用当前值进行进一步处理并且无法依靠依赖项来及时更新函数时,我遇到了一种情况。我必须做类似以下的事情。

const [values, setValues] = useState({});
const someCallback = useCallback(() => {
  setValues((values) => {
    if(values.x === 'something') return ({ ...values, x: 'something else' });
    return values;
  });
}, []);

它对我有用,但这并不意味着它正确。我从未见过有人像上面那样使用它,但是我看不到上面有什么问题。像这样使用useState的set参数有什么缺点吗?

最佳答案

我没有发现任何问题。您已经声明不存在任何依赖关系,这是正确的,因为您使用的是setValues的回调版本(而且setValues本身保证是稳定的)。

我可能要做的一件小事,更多的是样式问题,并且可以双向争论:为清楚起见,我可能会为values回调的setValues参数使用不同的名称:

const [values, setValues] = useState({});
const someCallback = useCallback(() => {
  setValues((currentValues) => {
    if(currentValues.x === 'something') return ({ ...currentValues, x: 'something else' });
    return currentValues;
  });
}, []);

但同样,您所拥有的似乎还不错。

10-04 12:18