我试图在实践中了解在道具为对象的情况下,shallow
道具比较在React.PureComponent
中如何工作。我已经阅读了两种解释:
在任何情况下,我的示例都应符合以下两种解释。但是,由于某些原因,我的组件仍会重新渲染。
这就是我所拥有的。
Parent.js
import React from 'react'
import {getItems} from '../utils/data'
import Child from './Child'
import Filter from './Filter'
class Parent extends React.Component {
state = {
filter: undefined,
items: []
}
handleFilterChange = filter => {
this.setState(
{filter},
() => getItems(filter, items => this.setState({items})
)
}
render() {
return (
<div>
<Filter filter={this.state.filter} onFilterChange={this.handleFilterChange} />
<Child items={this.state.items} />
</div>
)
}
}
Child.js
class Child extends React.PureComponent {
render() {
return (
console.log('RENDER')
...
)
}
}
更改filter
时,它将两次触发render
组件的Parent
方法:
Parent
更新filter
的状态时。items
并更新Parent
的状态时。现在,因为我的Child
是PureComponent
,所以我希望它只能在第二次而不是第一次被重新渲染。但实际上,这两次都重新呈现。
items
是一个对象数组,例如:
[
{title: 'aaa', index: 0, group: 'filter1'},
{title: 'bbb', index: 1, group: 'filter2'}
]
因此,如果仅更新PureComponent
,我希望filter
不会呈现,因为:
items
是在Parent
组件状态下存储的同一数组; items
数组的内容不变,即对象完全相同。为什么我的Child
组件然后渲染两次?