gpt4 book ai didi

javascript - React.js 使用非状态变量时出现错误,因为组件正在更改要控制的文本类型的不受控制的输入

转载 作者:行者123 更新时间:2023-12-03 00:42:48 25 4
gpt4 key购买 nike

我正在尝试使用非状态变量“newItem”来保存输入值

import React, { Component } from 'react';

class List extends Component {
constructor() {
super();
this.state = { items: [1, 2] };
this.newItem = undefined;
}
changeNewItem = e => {
this.newItem = e.target.value;
console.log(this.newItem);
};
addItem = e => {
if (e.keyCode !== 13) return;
var tmp_list = this.state.items;
tmp_list.push(this.newItem);
this.setState({ items: tmp_list }, () => {
this.newItem = '';
});
};
render() {
return (
<div>
<ul>
{this.state.items.map(item => (
<li key={item}>{item}</li>
))}
</ul>
<input
type="text"
placeholder="add item"
value={this.newItem}
onChange={this.changeNewItem}
onKeyUp={this.addItem}
/>
</div>
);
}
}

export default List;

当我在文本框中按 Enter 键时,该项目将添加到数组中,但出现如下错误

index.js:1452 警告:组件正在更改要控制的文本类型的不受控制的输入。输入元素不应从不受控制切换到受控制(反之亦然)。在组件的生命周期内决定使用受控或非受控输入元件。更多信息: 在输入中(在 List.js:29) 在 div 中(位于 List.js:23) 在列表中(位于 App.js:9) 在应用程序中(位于 src/index.js:8)

最佳答案

您的情况的问题是输入元素的初始值未定义,然后您使用变量 this.newItem 控制它。因此,您会收到试图将不受控制的输入更改为受控制的警告。

将值初始化为空字符串,而不是未定义。另外,如果您希望输入组件更改值,请使用状态而不是类变量

import React, { Component } from 'react';

class List extends Component {
constructor() {
super();
this.state = { items: [1, 2], newItem: '' };
}
changeNewItem = e => {
this.setState({newItem: e.target.value})
};
addItem = e => {
if (e.keyCode !== 13) return;
var tmp_list = this.state.items;
tmp_list.push(this.state.newItem);
this.setState({ items: tmp_list }, () => {
this.state.newItem = '';
});
};
render() {
return (
<div>
<ul>
{this.state.items.map(item => (
<li key={item}>{item}</li>
))}
</ul>
<input
type="text"
placeholder="add item"
value={this.state.newItem}
onChange={this.changeNewItem}
onKeyUp={this.addItem}
/>
</div>
);
}
}

export default List;

关于javascript - React.js 使用非状态变量时出现错误,因为组件正在更改要控制的文本类型的不受控制的输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53369745/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com