使用 useState 的旧值更新数组值



我确定这是一个简单的问题,但我无法弄清楚。

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

我认为这会起作用。 但它不喜欢语法。

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

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

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 }
));

相关内容

  • 没有找到相关文章