我试图摆脱这个错误信息,但仍然没有成功。
Warning: A component is changing an uncontrolled input of type text to be controlled. Input elements should not switch from uncontrolled to controlled (or vice versa). Decide between using a controlled or uncontrolled input element for the lifetime of the component.
还有Facebook页面的链接,但我仍然不知道该如何找到它。
class EditItem extends Component {
constructor(props) {
super(props);
this.state = {items: ''};
this.addItemService = new ItemService();
this.handleChange = this.handleChange.bind(this);
this.handleSubmit = this.handleSubmit.bind(this);
}
componentDidMount(){
axios.get('http://localhost:3005/items/edit/'+this.props.match.params.id)
.then(response => {
this.setState({ items: response.data });
})
.catch(function (error) {
console.log(error);
})
}
handleChange = (e) => {
let items = Object.assign({}, this.state.items); //creating copy of object
items.item = e.target.value; //updating value
this.setState({items});
}
handleSubmit(event) {
event.preventDefault(); // not sure why this
this.addItemService.updateData(this.state.items.item, this.props.match.params.id); // service for updating the data
this.props.history.push('/index'); // redirect
}
render() {
return (
<div className="container">
<form onSubmit={this.handleSubmit}>
<label>
Edit Item:
<input type="text" value={this.state.items.item} className="form-control" onChange={this.handleChange}/>
</label><br/>
<input type="submit" value="Update" className="btn btn-primary"/>
</form>
</div>
);
}
}
在输入似乎总是一个非空值,我如何解决这个问题?
当您尝试将未定义的值设置为任何输入类型时,这种类型的警告主要发生在React中。您可以使用条件运算符检查状态值是否未定义,如果未定义,则将其设置为空值。
<input type="text" value={this.state.items.item !== undefined ? this.state.items.item : ''} className="form-control" onChange={this.handleChange}/>
在状态中,项被定义为字符串,因此当您将值分配给文本输入时,如
<input type="text" value={this.state.items.item} className="form-control" onChange={this.handleChange}/>
你本质上是在写作
<input type="text" value={undefined} className="form-control" onChange={this.handleChange}/>
对于初始渲染,一旦API调用的结果可用并且items状态更改为包含item key的对象,您将向input传递一个值,从而将其从非受控转换为受控,这就是警告的内容。为了避免警告,您只需初始化您的状态,如
this.state = {items: { items: '' }};
或者使用输入比如
<input type="text" value={this.state.items.item || ''} className="form-control" onChange={this.handleChange}/>
我一直有这个错误:一个组件正在将受控输入的类型文本更改为不受控制。输入元件不应从受控切换到不受控(反之亦然)。决定在组件的生命周期内使用受控或不受控制的输入元件。当我尝试将值从数据库输入框点击编辑 这是我的代码:
问题内容: 警告:组件正在更改要控制的文本类型的不受控制的输入。输入元素不应从不受控制切换为受控制(反之亦然)。确定在组件的使用寿命中使用受控或非受控输入元素。* 以下是我的代码: 问题答案: 原因是,在您定义的状态下: 字段作为空白对象,因此在第一次渲染期间将是,输入字段的值将为: 因此,输入字段将变得不受控制。 在输入中输入任何值后,状态将变为: 那时输入字段被转换为受控组件;这就是为什么您得
使用ui textfield时出错 警告:TextField正在将text类型的受控输入更改为不受控。输入元素不应从受控切换到非受控(或反之亦然)。决定在组件的生存期内使用受控还是不受控输入元素
警告:组件正在更改要控制的非受控输入类型复选框。输入元件不应从不受控制切换到受控(反之亦然)。决定在组件的生命周期内使用受控或不受控制的输入元件。 我的代码:
由另一个控制器控制的用户表单在控制台上抱怨“警告:一个组件正在将一个不受控的输入改变为受控的。这可能是由于值从未定义的值更改为已定义的值而导致的,这是不应该发生的。决定在组件的生命周期内使用受控还是不受控的输入元素。更多信息:https://reactjs.org/link/controlled-components输入跨度li ul ... " 这是组件代码: 我尝试了其他stackoverfl
我得到了这个错误,我是新的反应。我看过其他帖子,但仍然不能解决这个问题。我们将不胜感激。谢谢 警告:组件正在更改要控制的电子邮件类型的未控制输入。输入元素不应该从不受控制切换到受控制(反之亦然)。决定在组件的生存期内使用受控还是不受控的输入元素。更多信息在输入(由编辑创建)中,在div(由编辑创建)中,在div(由编辑创建)中,在窗体(由编辑创建)中,在div(由编辑创建)中