我觉得我尝试了太阳底下的一切,但肯定漏掉了什么非常明显的东西。在下面的
当我用console.log newListItems时,新项目包含在内,所以到那个步骤为止的一切都有效,只是实际状态不会更新。我漏掉了什么?
加项目的方法:
addItem()函数
中,我试图将一个新项目推入数组并更新状态,但无论我做什么,状态都不会从初始数组改变。当我用console.log newListItems时,新项目包含在内,所以到那个步骤为止的一切都有效,只是实际状态不会更新。我漏掉了什么?
加项目的方法:
addItem(text){
var newListItems = this.state.listItems;
newListItems.push(text);
console.log(newListItems);
this.setState = ({
listItems : newListItems
});
}
同时,控制台没有任何错误消息。
完整代码:
import React, { Component } from 'react';
import './App.css';
class ListItem extends Component{
render(){
return (<li>{this.props.title}</li>);
}
}
class AddItem extends Component{
handleClick(){
this.props.addItem('blah');
}
render(){
return (
<div className="additem">
<input type="text" className="newitemname"/>
<span className="btn" onClick={this.handleClick.bind(this)}>Add item</span>
</div>
);
}
}
class App extends Component {
constructor(props){
super(props);
this.state = {
listItems : ['Wash the dishes','Do the laundry','Something else']
};
}
addItem(text){
var newListItems = this.state.listItems;
newListItems.push(text);
console.log(newListItems);
this.setState = ({
listItems : newListItems
});
}
render() {
return (
<div className="App">
<ul>
{this.state.listItems.map(function(item,index){
return (
<ListItem key={index} title={item} />
);
})}
</ul>
<AddItem addItem={this.addItem.bind(this)} />
</div>
);
}
}
export default App;
var newListItems = this.state.listItems
之后添加一个slice()
调用。 - Sulthan