JIYIK CN >

Current Location:Home > Learning > WEB FRONT-END > React >

Unable to enter text in the input box in React

Author:JIYIK Last Updated:2025/03/17 Views:

To work around the issue of input fields not being able to be controlled in React, make sure to use defaultValuethe property instead of the value of the uncontrolled input field. Alternatively, set a onChangeproperty on the field and handle the change event.

Here is an example of how the problem occurs.

const App = () => {
  return (
    <div>
      <input type="text" value="initial value" />
    </div>
  );
};

export default App;

The problem is that the input field has a valueattribute set, but it doesn't have a property to handle changing the input value onChange.

The easiest way to solve this is to use onChangethe property to handle inputchange events on the field.

import {useState} from 'react';

const App = () => {
  const [message, setMessage] = useState('Initial value');

  // 👇️ called every time input's value changes
  const handleChange = event => {
    setMessage(event.target.value);
  };

  console.log(message);

  return (
    <div>
      <input
        id="message"
        name="message"
        type="text"
        onChange={handleChange}
        value={message}
      />
    </div>
  );
};

export default App;

We use onChangethe property to handle change events on the input field. handleChangeThe function is called every time the field value changes.

请注意, we store the input value in the state.

The hook may be useStatepassed an initial state value.

If we don't want to use the initial state value, pass an empty string to useStatethe hook, const [message, setMessage] = useState('')e.g.

Now, every time the user types in the input field, handleChangethe function is called and a new value is set for the message variable, which re-renders the input field and displays the current value.

Another way to handle the problem where we can't type is to use an uncontrolled input field.

mport {useRef} from 'react';

const App = () => {
  const ref = useRef(null);

  const handleClick = () => {
    // 👇️ ref.current is a reference to the input field
    console.log(ref.current.value);
  };

  return (
    <div>
      <input
        ref={ref}
        id="message"
        name="message"
        defaultValue="Initial value"
        type="text"
      />

      <button onClick={handleClick}>Log input value</button>
    </div>
  );
};

export default App;

useRef()The hook can be passed an initial value as an argument. The hook returns a mutable ref object whose .current property is initialized to the passed argument.

请注意, we must access refthe current property of the object in order to access refthe input element on which we set the property.

When we pass a ref prop to an element, for example <input ref={myRef} />, React sets refthe object’s .currentproperty to the corresponding DOM node.

useRefThe hook creates a normal JavaScript object, but gives you the same refobject on every render. In other words, it's almost a .currentmemoized object value with a property.

It is important to note that when you change the value of the ref's current attribute, it will not cause a re-render.

Now every time the user clicks the button, the value of the input field will be recorded. This pattern is called an uncontrolled component.

请注意, we used defaultValuethe attribute instead of a value. defaultValueThe attribute allows us to specify an initial value for the input field.

If we use the property on the input field set value, we also need to set onChangethe property and handle the change event, otherwise we won't be able to type in the input box.

For reprinting, please send an email to 1244347461@qq.com for approval. After obtaining the author's consent, kindly include the source as a link.

Article URL:

Related Articles

How to avoid cross-origin (CORS) issues in React/Next.js

Publish Date:2025/03/17 Views:166 Category:NETWORK

In this article, we will introduce how to avoid cross-origin (CORS) issues in React/Next.js. Cross-origin resource sharing (CORS) is a protocol that defines how web requests should be handled when crossing different URLs.

React Tutorial - Transferring Props

Publish Date:2025/03/16 Views:185 Category:React

React transfers Props. Props are generated when components are encapsulated. Components expose some properties (Props) to the outside world to complete some functions.

React Tutorial: Props Anti-Pattern

Publish Date:2025/03/16 Views:183 Category:React

React's Props anti-pattern, using Props to generate state in getInitialState is an anti-pattern - Anti-Pattern.

React Tutorial - Props Validation

Publish Date:2025/03/16 Views:99 Category:React

Props validation is a very useful way to use components correctly. It can avoid many bugs and problems as your application becomes more and more complex. In addition, it can make your program more readable.

Why do you need to bind event handlers in React Class Components?

Publish Date:2025/03/16 Views:58 Category:React

When using React, we must have come across control components and event handlers. We need to use `.bind()` in the constructor of the custom component to bind these methods to the component instance. As shown in the following code:

Solution to the error "does not contain a default export" in React

Publish Date:2025/03/16 Views:187 Category:React

When we try to use `default import` to import from a module that does not have a `default export`, we get a "does not contain a default export" error. To fix the error, make sure the module has named exports and wrap the import in curly braces, e.g.

Scan to Read All Tech Tutorials

Social Media
  • https://www.github.com/onmpw
  • qq:1244347461

Recommended

Tags

Scan the Code
Easier Access Tutorial