在你做过的某个地方
this.setState({ tableTH: this.state.tableTH === 'asc' ? 'desc' : 'asc' })
你要做另一个动作,比如回忆api,你会怎么做?有两种方法,第一种是使用setState方法的第二个参数,就像这样
this.setState({ tableTH: this.state.tableTH === 'asc' ? 'desc' : 'asc' }, () => this.callAPI())
但是这可能很混乱,说你有很多setState,如果逻辑很复杂,这会让你的代码难以阅读。
使用componentDidUpdate
componentDidUpdate(prevProps, prevState) {
if(!isEqual(prevState.tableTH, this.state.tableTH)){ //let's assume tableTH state is an object
this.callAPI()
}
}
上面的代码工作原理相同,假设tableTH是一个仍然可以工作的对象。但是从lodash使用isEqual是否可以?这会使操作变得昂贵吗?嵌套对象怎么样?深度相等的比较将如下所示
_.differenceWith(prevState.tableTH, this.state.tableTH, _.isEqual);