为什么当 useState 数组元素改变时,反应文本输入没有改变?
Why is react text input not changing when useState array element changes?
function Example() {
const [strings, setStrings] = useState(["hi","yo"]);
return (
<div>
<input name='foo' type="text" value={strings[0]} onChange={setElement} />
</div>
);
function setElement(e){
let copyStrings = strings;
copyStrings[0] = e.target.value;
setStrings(copyStrings)
}
}
当我在文本输入框中键入一个键时,我可以在 React devtools 中看到 useState 挂钩的状态已更新以包含该键,但输入中显示的文本没有改变。为什么会这样,我该如何解决?
我有一组值,希望用户能够在输入控件中进行编辑。
let copyStrings = strings
是浅拷贝。您正在复制对数组的引用
你需要做一个深拷贝。有几个选项:
let copyStrings = [...strings]; //works with arrays
要么
let copyStirngs = JSON.parse(JSON.stringify(strings)); // works with objects as well
function Example() {
const [strings, setStrings] = useState(["hi","yo"]);
return (
<div>
<input name='foo' type="text" value={strings[0]} onChange={setElement} />
</div>
);
function setElement(e){
let copyStrings = strings;
copyStrings[0] = e.target.value;
setStrings(copyStrings)
}
}
当我在文本输入框中键入一个键时,我可以在 React devtools 中看到 useState 挂钩的状态已更新以包含该键,但输入中显示的文本没有改变。为什么会这样,我该如何解决?
我有一组值,希望用户能够在输入控件中进行编辑。
let copyStrings = strings
是浅拷贝。您正在复制对数组的引用
你需要做一个深拷贝。有几个选项:
let copyStrings = [...strings]; //works with arrays
要么
let copyStirngs = JSON.parse(JSON.stringify(strings)); // works with objects as well