javascript - 使用 useState 的旧值更新数组值

标签 javascript reactjs react-hooks

我确定这是一个简单的问题,但我想不出来。

const [rowLabels, setRowLabels] = React.useState(['','','','','',]);

我认为这会奏效。但它不喜欢这种语法。

setRowLabels(oldValues => ([
  ...oldValues,
  oldValues[position]: event.target.value
])

我知道我可以在下面执行此操作,但我宁愿不将 rowLabels 作为 Prop 传递以避免重新渲染。有没有一种方法可以只用旧值来做到这一点?

const rowLabelsCopy = [...rowLabels];
rowLabelsCopy[position] = event.target.value;
setRowLabels(rowLabelsCopy);

最佳答案

setState() 函数接受回调,正如您在第一次失败尝试中所展示的那样。该回调可以包含您第二次尝试中的行,并允许您使用 oldValues 而不是 rowLabels:

setRowLabels(oldValues => {
  const newValues = [...oldValues];
  newValues[position] = event.target.value;
  return newValues;
});

或者,如果您不想使用显式返回,这里有一个可读性稍差的替代方法:

setRowLabels(oldValues => Object.assign(
  [...oldValues],
  { [position]: event.target.value }
));

关于javascript - 使用 useState 的旧值更新数组值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56976458/

相关文章:

javascript - React Hooks useState+useEffect+event 给出陈旧状态

javascript - 使用 ContextAPI 不会重新呈现其使用者,但内容已更改。为什么?

javascript - 在 redux 中,reducer 改变状态后会发生什么?

javascript - 如何在 useEffect/useCallback-hook 中正确处理来自 React Context 的数据

javascript - React Hooks useEffect 不会使用正确的状态

javascript - this.setState 报错

javascript - 在javascript中将多个数组分成相等的 block

javascript 数组列表过滤器不起作用

javascript - 三.js在.fromGeometry()之后找到buffergeometry的顶点;

javascript - 客户端调整图像大小并使用 Canvas 发布