我正在尝试编写一个包含<input>
的功能组件,但是我收到"组件正在更改要控制的文本类型的不受控制的输入"错误,并且无法弄清楚我做错了什么。
我已经将我的代码简化为这样,这重现了这个问题:
function Input({ value, onChange }) {
const [text, setText] = useState(value);
function update(event) {
setText(event.target.value);
if (typeof onChange === "function") {
onChange(event.target.value);
}
}
return (
<input type="text" value={text} onChange={update} />
);
}
我不太确定如何使用useState
在这里使其成为受控元素——因为这显然不起作用:(
我做错了什么?
您很可能没有将value
道具传递给Input
组件,这将导致最初undefined
text
,并且当您在update
中设置文本时,它变得受控。
您可以更改代码以在每次使用它时传递value
prop 以Input
,或者value
为空字符串提供默认值。
function Input({ value = "", onChange }) {
const [text, setText] = useState(value);
function update(event) {
setText(event.target.value);
if (typeof onChange === "function") {
onChange(event.target.value);
}
}
return (
<input type="text" value={text} onChange={update} />
);
}