请教关于reactjs的教程一点疑问

链接描述

请问:
问题是PureComponent将会在this.props.words的新旧值之间做一个简单的比较。由于代码中words数组在WordAdder的handleClick方法中被改变了,尽管数组中的实际单词已经改变,this.props.words的新旧值还是相等的,因此即便ListOfWords具有应该被渲染的新单词,它还是不会更新。
原文中,不理解this.props.words的新旧值还是相等的这句。它的值不是被父亲组件改变并传递到子组件了嘛?
thx

阅读 1.8k
1 个回答

大部分情况下,你可以使用React.PureComponent而不必写你自己的shouldComponentUpdate,它只做一个浅比较。但是由于浅比较会忽略属性或状态突变的情况,此时你不能使用它。

PureComponent 只是做了一层浅比较, JS 里对数组, 对象等引用类型的数据,用 === 比较的是它们的引用,而不是每个成员,字段。
也就是说,如果修改了原始的数组, 即使前后的值都变了, 但是它们的引用是同一个, 它们就是相等的。
打个比方,一个叫小明的人再怎么整容,他还是这个人, 还是叫小明。不会变成其他人。

数组里的 push 方法就是会修改原始数组的一个方法。它不是返回一个新的数组。
所以即使数组的内部值改变了, PureComponent 经过浅比较, 发现前后的 props 引用是同一个,值没有被修改, 所以 shouldComponentUpdate 返回 false, 也就不会触发重新渲染。

其他能修改原始数组的方法可以看下: Mutator 下面的。
https://developer.mozilla.org...

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