当前位置: 首页 > 知识库问答 >
问题:

如何修复组件从文本类型的受控输入更改为不可控输入。Reactjs错误[重复]

徐德海
2023-03-14

我已经将初始状态设置为空白,为什么我会遇到这个错误?接下来该换什么?我正在使用ID从数据库中获取用户,然后试图更新他们的值。我只在第一次尝试时得到这个错误。随后的尝试工作完美。后端会有问题吗?

import React, { Component } from 'react';
import axios from 'axios';
export default class EditUsers extends Component {
    constructor(props)
    {  
        super(props);

        this.onchangeUsername = this.onchangeUsername.bind(this);
        this.onchangeAddress = this.onchangeAddress.bind(this);
        this.onchangePhoneno = this.onchangePhoneno.bind(this);
        this.onSubmit = this.onSubmit.bind(this);


        this.state = {
            username:'',
            address:'',
            phoneno:''
        }
    }

    componentDidMount() {

        axios.get('http://localhost:5000/users/'+this.props.match.params.id)
        .then(response=>{
            this.setState({
                username:response.data.username,
                address:response.data.address,
                phoneno:response.data.phoneno,
            })

        })
        .catch(function (error) {
            console.log(error);

        })


    }

    onchangeUsername(e)
    {
        this.setState({
                username:e.target.value
        });
    }

    onchangeAddress(e)
    {
        this.setState({
                address:e.target.value
        });
    }

    onchangePhoneno(e)
    {
        this.setState({
                phoneno:e.target.value
        });
    }
    onSubmit(e){
        e.preventDefault();

        const user =
        {
            username:this.state.username,
            address:this.state.address,
            phoneno:this.state.phoneno

        }
        console.log(user);

        axios.post('http://localhost:5000/users/update/'+this.props.match.params.id,user)
        .then(res=>console.log(res.data));

        this.setState({
            username:this.props.username,
            address:this.props.address,
            phoneno:this.props.phoneno 
        })

    }
    render() 
    {
        return (
            <div>
              <h3>Edit User List</h3>
              <form onSubmit={this.onSubmit}>
                  <div className="form-group">
                      <label>Username: </label>
                      <input type="text" required
                      className="form-control"
                      value={this.state.username}
                      onChange={this.onchangeUsername}
                      />
                  </div>
                  <div className="form-group">
                      <label>Address: </label>
                      <input type="text" required
                      className="form-control"
                      value={this.state.address}
                      onChange={this.onchangeAddress}
                      />
                  </div>
                  <div className="form-group">
                      <label>Phoneno: </label>
                      <input type="text" required
                      className="form-control"
                      value={this.state.phoneno}
                      onChange={this.onchangePhoneno}
                      />
                  </div>
                  <div className="form-group">
                <input type="submit" value="Update" className="btn btn-primary" />
                  </div>
              </form>
            </div>
        );
    }
}

共有1个答案

白哲茂
2023-03-14

防止输入值为NULL。

如果从null传递到not null,则会累犯此错误。

一个快速的解决办法是这样做:

        <input
          type="text"
          required
          className="form-control"
          value={this.state.username || ''}
          onChange={this.onchangeUsername}
        />
 类似资料:
  • 问题内容: 警告:组件正在更改要控制的文本类型的不受控制的输入。输入元素不应从不受控制切换为受控制(反之亦然)。确定在组件的使用寿命中使用受控或非受控输入元素。* 以下是我的代码: 问题答案: 原因是,在您定义的状态下: 字段作为空白对象,因此在第一次渲染期间将是,输入字段的值将为: 因此,输入字段将变得不受控制。 在输入中输入任何值后,状态将变为: 那时输入字段被转换为受控组件;这就是为什么您得

  • 我一直有这个错误:一个组件正在将受控输入的类型文本更改为不受控制。输入元件不应从受控切换到不受控(反之亦然)。决定在组件的生命周期内使用受控或不受控制的输入元件。当我尝试将值从数据库输入框点击编辑 这是我的代码:

  • 我试图摆脱这个错误信息,但仍然没有成功。 还有Facebook页面的链接,但我仍然不知道该如何找到它。 在输入似乎总是一个非空值,我如何解决这个问题?

  • 我有一个页面,我从服务器上获取数据,并为受控输入设置状态值。(例如,我有一个值为的输入,我从服务器上获取名称(例如Dave)并将其设置为name,因此输入值为Dave。它可以工作,但我遇到了对象数组的问题。) 所以这就是状态 这就是我如何使用 但这会导致此错误:

  • 我正在对我的组件进行排序 我在选择标记中有一个错误。获取错误props.filters.sortby的值最初是日期。当我试图从下拉列表中更改它时,错误发生了。

  • 我试图更改Select input的值,然后在控制台中得到以下警告。 index.js:1446警告:一个组件正在将text类型的受控输入更改为不受控。输入元素不应从受控切换到非受控(或反之亦然)。决定在组件的生存期内使用受控还是不受控的输入元素。 但我只是以正确的方式更新状态,这是我的代码 有人能提出问题吗?