首页 > 解决方案 > React:使用 useState 控制功能组件中的输入

问题描述

我正在尝试编写一个包含 的功能组件<input>,但我得到“A 组件正在更改要控制的文本类型的不受控制的输入”。错误,无法弄清楚我做错了什么。

我已经将我的代码简化为这个,它重现了这个问题:

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这里使用它来使其成为受控元素 - 因为这显然不起作用:(

我究竟做错了什么?

标签: javascriptreactjsreact-hooks

解决方案


您很可能没有将value道具传递给您的Input组件,这将导致text最初undefined,并且当您在 中设置文本时update,它会受到控制。

您可以更改代码以在每次使用时传递一个value道具,或提供一个空字符串的默认值。Inputvalue

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} />
    );
}

推荐阅读