请问:
问题是PureComponent将会在this.props.words的新旧值之间做一个简单的比较。由于代码中words数组在WordAdder的handleClick方法中被改变了,尽管数组中的实际单词已经改变,this.props.words的新旧值还是相等的,因此即便ListOfWords具有应该被渲染的新单词,它还是不会更新。
原文中,不理解this.props.words的新旧值还是相等的这句。它的值不是被父亲组件改变并传递到子组件了嘛?
thx
请问:
问题是PureComponent将会在this.props.words的新旧值之间做一个简单的比较。由于代码中words数组在WordAdder的handleClick方法中被改变了,尽管数组中的实际单词已经改变,this.props.words的新旧值还是相等的,因此即便ListOfWords具有应该被渲染的新单词,它还是不会更新。
原文中,不理解this.props.words的新旧值还是相等的这句。它的值不是被父亲组件改变并传递到子组件了嘛?
thx
4 回答1.6k 阅读
2 回答1.1k 阅读✓ 已解决
2 回答2.6k 阅读
1 回答959 阅读✓ 已解决
1 回答686 阅读✓ 已解决
2 回答848 阅读✓ 已解决
2 回答1k 阅读
PureComponent 只是做了一层浅比较, JS 里对数组, 对象等引用类型的数据,用 === 比较的是它们的引用,而不是每个成员,字段。
也就是说,如果修改了原始的数组, 即使前后的值都变了, 但是它们的引用是同一个, 它们就是相等的。
打个比方,一个叫小明的人再怎么整容,他还是这个人, 还是叫小明。不会变成其他人。
数组里的 push 方法就是会修改原始数组的一个方法。它不是返回一个新的数组。
所以即使数组的内部值改变了, PureComponent 经过浅比较, 发现前后的 props 引用是同一个,值没有被修改, 所以 shouldComponentUpdate 返回 false, 也就不会触发重新渲染。
其他能修改原始数组的方法可以看下: Mutator 下面的。
https://developer.mozilla.org...