我只是想确认我有这个权利。
我的理解是,没有pureComponent的反应本机中的一个长平面列表将更新列表中每个对象的状态。所以如果你有一个水平平面列表:
array = [A, B, C, D, E]
with a horizontal flatlist rendered to look like:
A | B | C | D | E
然后,即使A-D的状态没有任何变化,但E页中有一件事发生了变化,每个页面都将被更新。
我的理解是,PureComponent通过对数组进行浅层比较来克服这一点,看看是否有任何变化,并且只有当有变化时,比如E变成F,那么只有那个特定的页面更新。
如果这是正确的,那么如何克服嵌套数组的深层更改?
例如:
array = [ [1,2,3], [4,5,6], [7,8,9] ]
在上面的例子中,如果我将array[2][2]改为10而不是9,PureComponent将忽略这一点,因为它只进行浅层比较。所以我现在在我的应用程序中做的就是这样。forceUpdate(),但我相信这会导致每个页面的重新阅读。那么,如果没有forceUpdate,我如何使用PureComponent呢?我认为这是通过shouldComponentUpdate实现的,但是idk。请记住,我不能将数据结构更改为嵌套数组以外的内容。
最好附加代码。
为了提高flatlist的性能,您必须对数据进行分页,当用户滚动时,您将向其提供更多数据
要更新平面列表,请使用分配。向其声明并将其数据更新为扁平列表成员。
<FlatList
extraData={this.state}
/>
如果您使用PureComponent为您的平板列表成员,它可能不会更新。就我个人而言,我只发送事件来更新特定的成员,以减少所需的更新过程,但为了快速修复,您可以将您的项目改为组件。