Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/webpack/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript React忽略shouldComponentUpdate()中的道具更改_Javascript_Reactjs_Performance_React Native - Fatal编程技术网

Javascript React忽略shouldComponentUpdate()中的道具更改

Javascript React忽略shouldComponentUpdate()中的道具更改,javascript,reactjs,performance,react-native,Javascript,Reactjs,Performance,React Native,有时,对平面列表项使用PureComponent或Memo有助于优化平面列表性能,但有时也会导致更多性能问题。这取决于传递给列表项的道具。如果传递给列表项的道具太多,则只会恶化性能 在我的用例中,列表的主要组件有很多属性,因此我需要实现我自己的shouldComponentUpdate函数。因为我的道具不会导致重新渲染(更新),所以我需要在shouldComponentUpdate(而不是状态)中忽略它们 我试过这样的方法: state = { count: 0, player

有时,对平面列表项使用PureComponent或Memo有助于优化平面列表性能,但有时也会导致更多性能问题。这取决于传递给列表项的道具。如果传递给列表项的道具太多,则只会恶化性能

在我的用例中,列表的主要组件有很多属性,因此我需要实现我自己的shouldComponentUpdate函数。因为我的道具不会导致重新渲染(更新),所以我需要在shouldComponentUpdate(而不是状态)中忽略它们

我试过这样的方法:

 state = {
    count: 0,
    player: {
       name: "Nick"
    }
 } 


 shouldComponentUpdate(nextProps, nextState) {
    return nextState !== this.state;
 }
但是不起作用,因为nextState引用与this.state相同的内存(我想)

有什么办法吗

执行,因为我遵循这些技巧来获得更好的平面列表性能)。这是我的平面列表:

 keyExtractor = ({ id }) => id; // each element in the data array has an unique uuid.

 <FlatList
    data={data}
    getItemLayout={this.getItemLayout}
    keyExtractor={this.keyExtractor}
    listKey={listKey}
    legacyImplementation={false}
    numColumns={1}
    renderItem={this.renderItem}
    initialNumToRender={10}
    windowSize={5}
    maxToRenderPerBatch={5}
    updateCellsBatchingPeriod={50}
    removeClippedSubviews={false}
    ListFooterComponent={this.renderFooter}
    ListEmptyComponent={ListEmptyComponent}
    onEndReached={onEndReached}
    onEndReachedThreshold={0.15}
  />
keyExtractor=({id})=>id;//数据数组中的每个元素都有一个唯一的uuid。

谢谢。

这听起来很不对。您错误地找到了问题的“解决方案”,请您描述一下您的实际问题是什么(性能?),然后您会得到更好的答案。请看第8点,我正在按照这些提示来编写我的平面列表,我唯一不遵守的是这一点。例如,我有一个属性主题(来自react native paper):{colors:..},这是一个非常长的对象,我认为使用浅比较扩展react.PureComponent会影响性能。是的,第8点是有效的-当您有很多道具时,不要使用
PureComponent
memo
。但您已将其转换为
使shouldComponentUpdate对所有内容返回false,状态更改除外
,该值仅为野生值。但是如果shouldComponentUpdate仅在第一次渲染后调用,为什么忽略这些道具不好呢?这只需要调试——去掉复杂的组件,换上一个简单的组件,看看它渲染得快不快。然后一点一点地把碎片放回去,看看它什么时候开始变慢。