在下面的代码中,我希望ListItem
组件在handleOnAdd
和handleOnUpdate
上刷新。
这些函数作为道具传递给AddItem
和EditItem
组件。
ListItem
组件从item
的状态获取其App
。
它对handleOnDelete
很好用,因为我添加了.then(this.handleChange())
。我对handleOnAdd
和handleOnUpdate
做同样的事情,但是它们不会触发重新加载...。
export default class App extends Component {
constructor(props) {
super(props);
this.state = {
items: [{ "_id": { "$oid": "5f1fda0169e133382277a4ef" }, "title": "Blabla", "description": "adfadfd211233", "__v": 0 }]
}
this.handleOnUpdate = this.handleOnUpdate.bind(this);
this.handleOnAdd = this.handleOnAdd.bind(this);
this.handleOnDelete = this.handleOnDelete.bind(this);
this.handleChange = this.handleChange.bind(this);
}
componentDidMount() {
Axios.get('http://localhost:4200/items')
.then(res => {
this.setState({ items: res.data })
})
.catch(function (error) {
console.log(error)
})
}
handleChange() {
Axios.get('http://localhost:4200/items')
.then(res => {
this.setState({ items: res.data })
})
.catch(function (error) {
console.log(error)
})
}
handleOnAdd(item) {
Axios.post('http://localhost:4200/items/add/', item)
.then(res => console.log(res.data))
.then(this.handleChange());
}
handleOnUpdate(id, item) {
Axios.post('http://localhost:4200/items/update/' + id, item)
.then(res => console.log(res.data))
.then(this.handleChange());
}
handleOnDelete(id) {
Axios.get('http://localhost:4200/items/delete/' + id)
.catch(err => console.log(err)).then(this.handleChange());
}
render() {
return (
.... Router stuff....
<Route exact path='/add' render={(props) => <AddItem {...props} handleOnAdd={(item) => this.handleOnAdd(item)} />} />
<Route path='/edit/:id' render={(props) => <EditItem {...props} handleOnUpdate={(id, item) => this.handleOnUpdate(id, item)} />} />
<Route path='/index' render={(props) => <ListItem {...props} handleOnDeleteInApp={(id) => this.handleOnDelete(id)} items={this.state.items} />} />
.... Router stuff....
);
}
}
任何人都可以发现为什么handleOnDelete
以及随后的状态更改成功触发ListItem
的重新提交,而其他功能却没有吗?
答案 0 :(得分:3)
height: MediaQuery.of(context).size.height \ 2
此代码立即调用.then(this.handleChange());
,然后将其结果传递给handleChange
。因此,此代码不等待前几行中的添加/更新/删除。如果.then
工作正常,那么我认为那仅仅是由于比赛条件。
您应该将所有三个功能的这一行更改为:
handleOnDelete
或
.then(() => this.handleChange())