react componentDidUpdate() prevState !== this.state 问题

componentDidUpdate(prevProps, prevState) {
    console.log(1, prevState.receiveSearch !== this.state.receiveSearch, prevState.receiveSearch, this.state.receiveSearch)
    if (prevState.receiveSearch !== this.state.receiveSearch) {
        this.setState({
            receiveSearch: {}
        });
    }
}

为什么prevState.receiveSearch, this.state.receiveSearch打印出来一样!==却是true
图片描述

阅读 3.2k
2 个回答
this.state.receiveSearch //指向的不是同一个对象, 所以prevState.receiveSearch !== this.state.receiveSearch ==> true 

我猜你在上一步的操作为

this.setState({receiveSearch: {click: false}}) 或
this.setState({receiveSearch: {click: true}})
//其实都是生成了一个新对象, 在比较过程中严格不等于(!==)肯定就是true了.

react 是 immutable的,两个对象只是所含值相等,但是是两个不同的对象,

另外,即便是同一个对象,你这里也达不到目的,因为如果是同一个对象,那么判断会一直相等。

你需要再看看如何判断两个对象是否相等。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题