大佬教程收集整理的这篇文章主要介绍了即使使用扩展运算符 React.JS,SetState 也会覆盖之前的状态,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我的 setState
中的 handleChange
有问题。
因此,在点击 addList
后的代码中,会出现带有 div
和 input
的 button
,然后当我在 input
中输入时,input state
将更新单击添加按钮后,div
将消失。
所以我的问题是下次点击 addList
时,先前输入的值仍然存在并且 hIDeAddList handler
没有将 input
状态设置为空,并且当我输入新打开的 { {1}} 之前的 div
将覆盖。即使使用索引和扩展运算符,它仍然存在同样的问题。
我该怎么办?
input state
状态已正确更改。你可以添加一个控制台日志来查看:
render() {
console.log(this.statE);
return (
...
它没有显示在您的屏幕上的原因是您为 ID 'add-button' 设置的 {display: 'none'}
。您的 var y = document.getElementById("add-button")
将只获取第一个元素,而不是整个元素列表。
仅供参考,在您的案例的反应项目中使用 document.getElementById
不太正确。应该由国家来完成。这是一个完整的例子:
export class MyClass extends Component {
constructor(props) {
super(props);
this.state = {
input: [{title: ''}],showAnotherListBtn: true,showList: false,};
}
onClickAnotherListBtn = () => {
this.setState({
showAnotherListBtn: false,showList: true,});
}
addList = () => {
this.setState({
input: [...this.state.input,{title: ''}],});
}
handleChange(e,indeX) {
const {name,value} = e.target;
const list = [...this.state.input];
list[index][name] = value;
this.setState({input: list});
}
render() {
console.log(this.statE);
return (
<div>
{this.state.showAnotherListBtn ?
<button id="btn-list" className="btn btn-default btn-list" type="submit" onClick={this.onClickAnotherListBtn}>Add Another
List</button> : null}
{this.state.showList && this.state.input.map((x,i) => {
return (
<div key={i} id="add-button" className="add-button">
<input id="input" type="text" onChange={(E) => {
this.handleChange(e,i)
}} value={x.titlE} name="title" className="form-control add-input"/>
<button className="btn btn-default btn-list-add" onClick={this.addList} type="submit">Add</button>
</div>
)
})}
</div>
)
}
}
export default MyClass
从上面的代码可以看出,您只需使用布尔状态来确定是否应该显示元素。
希望这有帮助;)
以上是大佬教程为你收集整理的即使使用扩展运算符 React.JS,SetState 也会覆盖之前的状态全部内容,希望文章能够帮你解决即使使用扩展运算符 React.JS,SetState 也会覆盖之前的状态所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。