Unable to enter text in the input box in React
To work around the issue of input fields not being able to be controlled in React, make sure to use defaultValue
the property instead of the value of the uncontrolled input field. Alternatively, set a onChange
property 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 value
attribute set, but it doesn't have a property to handle changing the input value onChange
.
The easiest way to solve this is to use onChange
the property to handle input
change 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 onChange
the property to handle change events on the input field. handleChange
The function is called every time the field value changes.
请注意
, we store the input value in the state.
The hook may be useState
passed an initial state value.
If we don't want to use the initial state value, pass an empty string to
useState
the hook,const [message, setMessage] = useState('')
e.g.
Now, every time the user types in the input field, handleChange
the 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 accessref
the current property of the object in order to accessref
the input element on which we set the property.
When we pass a ref prop to an element, for example <input ref={myRef} />
, React sets ref
the object’s .current
property to the corresponding DOM node.
useRef
The hook creates a normal JavaScript object, but gives you the sameref
object on every render. In other words, it's almost a.current
memoized 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 useddefaultValue
the attribute instead of a value.defaultValue
The 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 onChange
the 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.
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.
React tutorial: Types of Props for child components
Publish Date:2025/03/16 Views:170 Category:React
-
Usually, the child components of a React component are a group, that is, the child components are an array. Introduction to Type of the Children Props.
How to solve the error Uncaught TypeError: Cannot read properties of undefined in
Publish Date:2025/03/16 Views:150 Category:React
-
In the process of React development, we often encounter some errors. Here we look at an error reported in App.js. The error is as follows: App.js:69 Uncaught TypeError: Cannot read properties of undefined (reading 'setState') at onInput
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.
Error in React: Attempted import error 'X' is not exported from Solution
Publish Date:2025/03/16 Views:76 Category:React
-
In React, the error “Attempted import error 'X' is not exported from” in React.js occurs when we try to import a named import that does not exist in the specified file. To fix the error, make sure the module has named exports and you have not obfu