我正在尝试编写一个包含<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
使其成为受控元素,因为这显然不起作用:(
我在做什么错了?
答案 0 :(得分:4)
您很可能没有将value
道具传递给Input
组件,这将导致text
最初是undefined
,当您在update
,它变得受控。
您可以更改代码,以在每次使用value
道具时将其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} />
);
}
提供一个空字符串的默认值。
<button type="button"><span class="icon-remove"></span><span class="sr-only">Close</span></button>