warning.js:33 Warning: A component is changing a controlled input of type text to be uncont
原创
©著作权归作者所有:来自51CTO博客作者wx63fc582aa165f的原创作品,请联系作者获取转载授权,否则将追究法律责任
今天在做一个小练习的时候,真的是踩了很多坑,还好最后还是爬出来了,现在分享出来,希望帮到遇到和我一样问题的你,也是避免自己再次踩坑里
报错内容:
Warning: A component is changing a controlled input of type text to be uncontrolled.
Input elements should not switch from controlled to uncontrolled (or vice versa).
Decide between using a controlled or uncontrolled input element for the lifetime of the component.
其实网上有解决这个问题的方法,但我没太看懂,下面先看看我的代码
Form组件中的代码
import React, {Component} from 'react';
export default class Form extends Component{
render(){
let {change,val} = this.props;
return(
<form>
<input type="text" value={val} onChange={
(event)=>{//event传参不可少(此处少了,就会报上面的警告)
change(event);//这个event也不可少,少了会报错(Uncaught TypeError: Cannot read property 'target' of undefined)
}
}/>
<input type="text" value={val} onChange={
(event)=>{
change(event); }
}/>
<input type="text" value={val} onChange={
(event)=>{
change(event);
}
}/>
</form>
)
}
}
App.js中的代码:
import React, {Component} from 'react';
import ReactDOM from 'react-dom';
import Form from 'events/Form.js';
class Top extends React.Component{
constructor(props){
super(props);
this.state = {
val:""
}
this.change = this.change.bind(this)
}
change(event){
this.setState({
val:event.target.value
})
}
render(){
let{val} = this.state;
return(
<div className="top">
<Form val={val} change={this.change}/>//引入Form组件
</div>
)
}
}
我自己的错是出在了没有给事件传event参数,下面是Form.js中的核心代码(App.js中的代码都挺核心的哈)
<input type="text" value={val} onChange={
(event)=>{
change(event);
}
}/>
第一个event没有传,就会报上面的警告,原因是,这时在App.js中的event.target不是input这个对象,我打印看了是<react></react>,那这个对象很显然是没有value属性的,event.target.value其实就是undefined,那结果自然也就不会对了
第二个没有传,这个肯定要报错的,我试了试报的错是:Uncaught TypeError: Cannot read property 'target' of undefined
其实上面这两个问题,只要js学的差不多,都是很好理解的,只是有时候我们忽略掉了,仔细查错误的原因,还是很好解决的
当然我不知道报这个错的原因是不是都是我上面提到的,那,我只是把我自己遇到的问题以及怎么解决记录在了上面,如果您的问题和我的不一样,那很抱歉不能帮到您,当然您也可以把您的错留言给我,大家一起想想办法,也是一种成长