使用 useState 的旧值更新数组值
Update an array value with useState's old values
我确定这是一个简单的问题,但我想不出来。
const [rowLabels, setRowLabels] = React.useState(['','','','','',]);
我觉得这行得通。但它不喜欢语法。
setRowLabels(oldValues => ([
...oldValues,
oldValues[position]: event.target.value
])
我知道我可以在下面执行此操作,但我宁愿不将 rowLabels 作为道具传递以避免重新渲染。有什么方法可以只使用旧值吗?
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;
});
或者,如果您不想使用明确的 return,这里有一个可读性稍差的替代方法:
setRowLabels(oldValues => Object.assign(
[...oldValues],
{ [position]: event.target.value }
));
我确定这是一个简单的问题,但我想不出来。
const [rowLabels, setRowLabels] = React.useState(['','','','','',]);
我觉得这行得通。但它不喜欢语法。
setRowLabels(oldValues => ([
...oldValues,
oldValues[position]: event.target.value
])
我知道我可以在下面执行此操作,但我宁愿不将 rowLabels 作为道具传递以避免重新渲染。有什么方法可以只使用旧值吗?
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;
});
或者,如果您不想使用明确的 return,这里有一个可读性稍差的替代方法:
setRowLabels(oldValues => Object.assign(
[...oldValues],
{ [position]: event.target.value }
));