我的FlatList
出现此错误:
VirtualizedList:您的列表很大,更新速度很慢-确保您的renderItem函数呈现遵循React性能最佳实践的组件,例如PureComponent,shouldComponentUpdate等。
我的renderItem
是:
renderItem(item) {
return (
<View style={[styles.item]}>
<AgendaItem item={item} />
</View>
);
}
我的组件:
import React from "react";
import propTypes from "prop-types";
import { Text, View, WebView } from "react-native";
import { filterString } from "../../helpers";
const AgendaItem = ({
item: {
title,
venue,
colour,
organiser,
startTime,
endTime,
description,
allDay,
textColor
}
}) => {
let descriptionNoHtml = description.replace(/<\/?[^>]+(>|$)/g, "");
return (
<View
style={{
padding: 10,
backgroundColor: colour || "white"
}}
>
{title ? (
<Text style={{ color: textColor || "black" }}>{title}</Text>
) : null}
{description ? (
<Text style={{ color: textColor || "black" }}>
{descriptionNoHtml}
</Text>
) : null}
{venue ? (
<Text style={{ color: textColor || "black" }}>{venue}</Text>
) : null}
{organiser ? (
<Text style={{ color: textColor || "black" }}>{organiser}</Text>
) : null}
{startTime ? (
<Text style={{ color: textColor || "black" }}>
{startTime + " - " + endTime}
</Text>
) : null}
</View>
);
};
AgendaItem.propTypes = {
title: propTypes.string,
venue: propTypes.string,
colour: propTypes.string,
organiser: propTypes.string,
description: propTypes.string,
startTime: propTypes.string,
endTime: propTypes.string,
allDay: propTypes.string,
textColor: propTypes.string
};
export default AgendaItem;
如何使用shouldComponentUpdate
删除警告?
答案 0 :(得分:0)
doc提供了呈现垂直长列表时需要考虑的内容:
如果您的应用程序呈现了很长的数据列表(数百行或数千行),我们建议使用一种称为“窗口”的技术。该技术在任何给定时间仅呈现一小部分行,并且可以大大减少重新呈现组件所需的时间以及所创建的DOM节点的数量。
这是您需要使用PureComponent或仅应在需要时利用shouldComponentUpdate钩子进行更新的地方。
您正在使用无法使用任何生命周期方法的无状态组件。要使用生命周期方法,您需要使用基于类的全状态组件。
您可以用PureComponent或Component替换无状态组件。如果您使用组件,则可能需要使用shouldComponentUpdate挂钩来通知组件,仅检测到新更改的更新。这是使用PureComponent的示例。
替换:
const AgendaItem = ({
item: {
title,
venue,
colour,
organiser,
startTime,
endTime,
description,
allDay,
textColor
}
}) => {
使用:
class AgendaItem extends React.PureComponent {
const { item: {
title,
venue,
colour,
organiser,
startTime,
endTime,
description,
allDay,
textColor
}
} = this.props
在不使用PureComponent的情况下,该组件将在任何组件的每次状态更改时更新。但是使用PureComponent时,只有在检测到新项目时才会更新。
如果您想使用shouldComponentUpdate钩子,请先查看here以供参考。