1

I'm trying to get text from a input element, setting it to state and then rendering it back into the input box. However I think my event typing is wrong? I've searched online and tried implementing many solutions but none have worked so far. Any help is appreciated.

my component:

import React, { ChangeEvent, ChangeEventHandler, useState } from "react";

export default function Unidirectionflow() {
  const [state4, setState4] = useState("");
  const [state5, setState5] = useState("");

  let handleChange4 = (e: React.FormEvent<HTMLInputElement>): void => {
    setState3((e.target as HTMLInputElement).value);
  };

  let handleChange5 = (event: ChangeEvent<HTMLInputElement>) => {
    setState5(event.currentTarget.value);
  };

  return (
    <main>
      <input type="text" value={state4} onChange={() => handleChange4} />
      <input type="text" value={state5} onChange={() => handleChange5} />
    </main>
  );
}


Typescript input onchange event.target.value

React TypeScript: Correct Types for onChange

Can't type in React TextField Input

https://react-typescript-cheatsheet.netlify.app/docs/basic/getting-started/forms_and_events/

4 Answers 4

4

You can do like this

export default function Unidirectionflow() {
const [states, setStates] = useState({
state3:'',
state4:''
})

const handleChange = (
    e: React.ChangeEvent<HTMLTextAreaElement | HTMLInputElement>
  ) => {
    setStates({
      ...states,
      [e.target.name]: e.target.value.trim(),
    });
  };

  return (
    <main>
      <input type="text" name="state3" value={states.state3} onChange={handleChange} />
      <input type="text" name="state4" value={states.state4} onChange={handleChange} />
    </main>
  );
};


Sign up to request clarification or add additional context in comments.

Comments

1

Just do this:

handleChange = (event: Event) => {
      const { value } = event.target as unknown as { value: string };
      setState(value);
};
  
<input type='text' onChange={handleChange} />

And the squeegee lines will go away.

Comments

0

onChange={handleChange} See if this can help you!

2 Comments

Consider formating code in your answer. Also, add some context to better explain your approach.
The question asks for Typescript, which is not mentioned in the answer.
-2

You have forgot to pass the event when calling the function

Try this

onChange={(e) => handleChange(e)}

Or

onChange={handleChange}

Code sandbox => https://codesandbox.io/s/dreamy-pateu-1mc6j?file=/src/App.tsx

2 Comments

@Sujio, check this out!!
No reference to Typescript as requested in the question

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.