Tuesday, May 21, 2024
 Popular · Latest · Hot · Upcoming
0
rated 0 times [  7] [ 7]  / answers: 1 / hits: 7247  / 3 Years ago, fri, may 7, 2021, 12:00:00

HELP. i use react hook, i got the error when i type the input.


error:



Warning: A component is changing a controlled input to be uncontrolled. This is likely caused by the value changing from a defined to undefined, which should not happen. Decide between using a controlled or uncontrolled input element for the lifetime of the component.



Code:


const AddUser = () => {
const initialUserState = {
id: null,
name: '',
age: 0
}

const [users, setUsers] = useState(initialUserState)

const handleChange = (e) => {
setUsers({ [e.target.name]: e.target.value })

e.preventDefault()
}

return (
<div>
<input name="name" type="text" value={users.name} onChange={handleChange}/>
<input name="age" type="number" value={users.age} onChange={handleChange}/>
</div>
)}

More From » reactjs

 Answers
5

Unlike setting the state in a class component, useState doesn't merge the object you pass, and you have to do it manually when setting the state. When you set age, for example, you replace the entire state object, which makes name to be undefined, and vice versa.


Use functional update, and create a new state based on the previous state object before setting it.




const { useState } = React

const AddUser = () => {
const initialUserState = {
id: null,
name: '',
age: 0
}

const [users, setUsers] = useState(initialUserState)

const handleChange = (e) => {
// create the new state and set it
setUsers(prev => ({ ...prev, [e.target.name]: e.target.value }))

e.preventDefault()
}

return (
<div>
<input name=name type=text value={users.name} onChange={handleChange}/>
<input name=age type=number value={users.age} onChange={handleChange}/>
</div>
)
}

ReactDOM.render(
<AddUser />,
root
)

<script crossorigin src=https://unpkg.com/react@17/umd/react.development.js></script>
<script crossorigin src=https://unpkg.com/react-dom@17/umd/react-dom.development.js></script>

<div id=root></div>




[#1388] Wednesday, April 28, 2021, 3 Years  [reply] [flag answer]
Only authorized users can answer the question. Please sign in first, or register a free account.
havenbilliec

Total Points: 324
Total Questions: 106
Total Answers: 94

Location: Pitcairn Islands
Member since Fri, Oct 15, 2021
3 Years ago
havenbilliec questions
;