1

我得到了钩子

const [myName, setMyName] = useState("");
const myNameRef = useRef();

然后我有表格:

<form onSubmit={(e) => addVist(e, user.id)}>
 <input type="text" name="myName" ref={myNameRef} onChange={e => setMyName(e.target.value)} />
 <input type="submit" value="Run" />
</form>

和方法:

const addVist = (e, userId) => {
        e.preventDefault();

        console.log(myName)
        //some code....

        //clear value form
        setMyName("");
        //setMyName('');
        //setMyName(e.target.value = "");
        //myNameRef.current.value("");

    }

setMyName("")它不起作用 - 我仍然看到输入中的价值。

4

4 回答 4

2

您错过了myName作为标签value属性的绑定。input

 <input type="text" name="myName" value={myName} ref={myNameRef} onChange={e => setMyName(e.target.value)} />
于 2020-11-30T09:20:32.770 回答
1

在您的文本输入中,您应该myName像这样传递给 value 属性

<input type="text" name="myName" value={myName} ref={myNameRef} onChange={e => setMyName(e.target.value)} />
于 2020-11-30T09:22:13.393 回答
1

您忘记将 myName 添加为值。

<input type="text" name="myName" value={myName} ref={myNameRef} onChange={e => setMyName(e.target.value)} />
于 2020-11-30T09:59:22.113 回答
0

input以下是使用状态参考进行清除的完整示例:

export default function App() {
  const [value, setValue] = useState("");
  const inputRef = useRef();
  return (
    <>
      <input value={value} onChange={(e) => setValue(e.target.value)} />
      <input ref={inputRef} />
      <button
        onClick={() => {
          setValue("");
          inputRef.current.value = "";
        }}
      >
        Clear
      </button>
    </>
  );
}

请参阅受控组件与非受控组件

于 2020-11-30T09:37:53.353 回答