【发布时间】:2018-06-02 19:55:05
【问题描述】:
我正在使用 React 创建一个待办事项列表应用程序,在我的应用程序中,当我单击 x 按钮删除一个项目并使用 console.log 检查当前数组时,我可以看到数组已正确更新为我想要的项目从数组列表中删除删除,但 Dom 只呈现我要删除的项目而不是整个数组
import React from 'react';
import ReactDom from 'react-dom';
class TodoList extends React.Component{
constructor(props){
super(props);
this.state={
todoList:[],
todo:''
}
};
onValueChange=(e)=>{
const todo=e.target.value;
this.setState({todo})
};
removeItem=(props)=>{
this.setState({todoList:this.state.todoList.splice(props,1)})
console.log(this.state.todoList)
};
onSubmit=(e)=>{
e.preventDefault();
const {todoList,todo}=this.state
this.setState({todoList:[...todoList,todo]})
this.setState({todo:''})
console.log(this.state.todoList)
};
render(){
const myList=this.state.todoList.map((todo,index)=>(
<li key={index}>
{todo}
<button onClick={()=>this.removeItem(index)}>x</button>
</li>
))
return (
<div>
<form onSubmit={this.onSubmit}>
<input
type="text"
value={this.state.todo}
onChange={this.onValueChange}
autoFocus
placeholder='todo'
/>
</form>
<ol>
{myList}
</ol>
</div>
)
};
};
ReactDom.render(<TodoList/>,document.getElementById('app'));
这是图片
在图片中,您可以看到控制台显示的数组已删除了项目“5”,但屏幕仅显示项目“5”而不是项目 1 到 4
【问题讨论】:
-
splice 返回删除的项目。先拼接后赋值
-
不要用 console.log 检查数组! setState 是异步方法,您无法在 setState 之后立即看到状态突变。您可以使用 setTimeout(() => console.log(this.state)) 之类的方法或在 componentDidUpdate 函数中打印状态。
标签: javascript arrays reactjs key