在componentDidUpdate中使用浅比较isEqual

时间:2018-03-11 03:14:26

标签: javascript reactjs ecmascript-6 lodash

在你做过的某个地方

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);

0 个答案:

没有答案