warning.js:33 Warning: A component is changing a controlled input of type text to be uncont

分手后的思念是犯贱 2022-05-25 11:08 224阅读 0赞

今天在做一个小练习的时候,真的是踩了很多坑,还好最后还是爬出来了,现在分享出来,希望帮到遇到和我一样问题的你,也是避免自己再次踩坑里

报错内容:

  1. Warning: A component is changing a controlled input of type text to be uncontrolled.
  2. Input elements should not switch from controlled to uncontrolled (or vice versa).
  3. Decide between using a controlled or uncontrolled input element for the lifetime of the component.

其实网上有解决这个问题的方法,但我没太看懂,下面先看看我的代码

Form组件中的代码

  1. import React, {Component} from 'react';
  2. export default class Form extends Component{
  3. render(){
  4. let {change,val} = this.props;
  5. return(
  6. <form>
  7. <input type="text" value={val} onChange={
  8. (event)=>{//event传参不可少(此处少了,就会报上面的警告)
  9. change(event);//这个event也不可少,少了会报错(Uncaught TypeError: Cannot read property 'target' of undefined)
  10. }
  11. }/>
  12. <input type="text" value={val} onChange={
  13. (event)=>{
  14. change(event); }
  15. }/>
  16. <input type="text" value={val} onChange={
  17. (event)=>{
  18. change(event);
  19. }
  20. }/>
  21. </form>
  22. )
  23. }
  24. }

App.js中的代码:

  1. import React, {Component} from 'react';
  2. import ReactDOM from 'react-dom';
  3. import Form from 'events/Form.js';
  4. class Top extends React.Component{
  5. constructor(props){
  6. super(props);
  7. this.state = {
  8. val:""
  9. }
  10. this.change = this.change.bind(this)
  11. }
  12. change(event){
  13. this.setState({
  14. val:event.target.value
  15. })
  16. }
  17. render(){
  18. let{val} = this.state;
  19. return(
  20. <div className="top">
  21. <Form val={val} change={this.change}/>//引入Form组件
  22. </div>
  23. )
  24. }
  25. }

我自己的错是出在了没有给事件传event参数,下面是Form.js中的核心代码(App.js中的代码都挺核心的哈)

  1. <input type="text" value={val} onChange={
  2. (event)=>{
  3. change(event);
  4. }
  5. }/>

第一个event没有传,就会报上面的警告,原因是,这时在App.js中的event.target不是input这个对象,我打印看了是,那这个对象很显然是没有value属性的,event.target.value其实就是undefined,那结果自然也就不会对了

第二个没有传,这个肯定要报错的,我试了试报的错是:Uncaught TypeError: Cannot read property ‘target’ of undefined

其实上面这两个问题,只要js学的差不多,都是很好理解的,只是有时候我们忽略掉了,仔细查错误的原因,还是很好解决的

当然我不知道报这个错的原因是不是都是我上面提到的,那,我只是把我自己遇到的问题以及怎么解决记录在了上面,如果您的问题和我的不一样,那很抱歉不能帮到您,当然您也可以把您的错留言给我,大家一起想想办法,也是一种成长

发表评论

表情:
评论列表 (有 0 条评论,224人围观)

还没有评论,来说两句吧...

相关阅读