简体   繁体   English

警告:组件正在将受控输入更改为 React js 中不受控制的输入

[英]Warning: A component is changing a controlled input to be uncontrolled in React js

HELP.帮助。 i use react hook, i got the error when i type the input.我使用 React Hook,输入时出现错误。

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

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.与在 class 组件中设置 state 不同, useState不会合并您通过的 object,并且您必须在设置 ZA25676E8A6914 时手动执行此操作。 When you set age , for example, you replace the entire state object, which makes name to be undefined , and vice versa.例如,当您设置age时,您会替换整个 state object,这会使name变为undefined ,反之亦然。

Use functional update , and create a new state based on the previous state object before setting it.使用功能更新,设置前在之前的state object的基础上新建一个state。

 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>

This page and this paragraph can help you understand the problem.本页本段可以帮助您理解问题。

When you get the updated input through the onChange event listener you don't need to pass again the data through the value attribute.当您通过onChange事件侦听器获取更新的输入时,您无需再次通过value属性传递数据。

When data is passed through the value attribute the component is considered "controlled".当数据通过value属性传递时,组件被认为是“受控的”。 This means that the component is controlled by your code and shouldn't receive user input.这意味着组件由您的代码控制,不应接收用户输入。

If you just want to set a default value you can use the defaultValue attribute.如果您只想设置默认值,可以使用defaultValue属性。

To remove the warning just remove the value={/* Something */} .要删除警告,只需删除value={/* Something */}

in my case, i figured out changing input atribute name from:就我而言,我想出了从以下更改输入属性名称的方法:

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

to:到:

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

for example in this i change name for fullname, due to react does not recognize it as a constant but as the attribute of the input例如,在此我将全名更改为全名,因为反应不将其识别为常量,而是将其识别为输入的属性

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 警告:组件正在将受控输入更改为反应 js 中的不受控输入 - Warning: A component is changing a controlled input to be uncontrolled input in react js 反应:警告,一个组件正在改变一个不受控制的输入来控制 - React: Warning, a component is changing an uncontrolled input to be controlled 警告:组件正在将文本类型的受控输入更改为不受控制。 (React.js) - Warning: A component is changing a controlled input of type text to be uncontrolled. (React.js) “一个组件正在将不受控制的输入更改为受控。” React JS 中显示此错误 - "A component is changing an uncontrolled input to be controlled." this error showing in React JS 电子邮件输入警告-组件将文本类型的受控输入更改为不受控制 - Email Input Warning - A component is changing a controlled input of type text to be uncontrolled 警告:组件正在更改要控制的文本类型的不受控制的输入 - Warning: A component is changing an uncontrolled input of type text to be controlled 警告:组件正在将未定义类型的非受控输入更改为受控 - Warning: A component is changing an uncontrolled input of type undefined to be controlled ReactJS - 警告:组件正在更改要控制的文本类型的不受控制的输入 - ReactJS - Warning: A component is changing an uncontrolled input of type text to be controlled 警告:组件正在更改要控制的文本类型的不受控输入 - Warning: A component is changing an uncontrolled input of type text to be controlled formik 警告,组件正在更改不受控制的文本类型输入以进行控制 - formik warning, A component is changing an uncontrolled input of type text to be controlled
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM