3

I got hook:

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

Then I have form:

<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>

And method:

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

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

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

    }

But the setMyName("") is not working - still I see value inside input.

skyboyer
  • 22,209
  • 7
  • 57
  • 64
4est
  • 3,010
  • 6
  • 41
  • 63

4 Answers4

4

Here is a complete example of clearing input using state OR a reference:

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

Refer to Controlled VS Uncontrolled components.

Dennis Vash
  • 50,196
  • 9
  • 100
  • 118
2

You missed binding myName as value attribute of the input tag.

 <input type="text" name="myName" value={myName} ref={myNameRef} onChange={e => setMyName(e.target.value)} />
wangdev87
  • 8,611
  • 3
  • 8
  • 31
1

On your text input you should pass myName into the value attribute like so

<input type="text" name="myName" value={myName} ref={myNameRef} onChange={e => setMyName(e.target.value)} />
1

You forgot to add myName as value.

<input type="text" name="myName" value={myName} ref={myNameRef} onChange={e => setMyName(e.target.value)} />
Elif
  • 141
  • 13