使用useState的旧值更新数组值

时间:2019-07-10 18:14:22

标签: javascript reactjs react-hooks

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

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

我认为这可行。但它不喜欢语法。

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

我知道我可以在下面执行此操作,但是我宁愿不将rowLabels作为道具来避免重新渲染。有什么办法可以只使用oldValues做到这一点?

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

1 个答案:

答案 0 :(得分:1)

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

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

或者,如果您不想使用显式的收益,这是一种不太易读的选择:

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