代码之家  ›  专栏  ›  技术社区  ›  Bomber

警告,VirtualizedList:您有一个更新缓慢的大列表

  •  0
  • Bomber  · 技术社区  · 6 年前

    我的电脑出了这个错误 FlatList

    我的 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 删除警告?

    1 回复  |  直到 6 年前
        1
  •  2
  •   Bhojendra Rauniyar    6 年前

    这个 doc

    如果应用程序呈现长的数据列表(成百上千行),我们建议使用一种称为窗口的技术。这种技术在任何给定的时间只呈现一小部分行,并且可以显著减少重新呈现组件所需的时间以及创建的DOM节点的数量。

    在这里,您需要使用PureComponent或shouldComponentUpdate钩子,以便仅在需要时进行更新。


    您使用的是无状态组件,它不能有任何生命周期方法。要使用lifecycle方法,您需要使用基于类的statefull组件。

    替换:

    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,它只有在检测到新项时才会更新。

    如果您想使用shouldcomponentupdatehook,那么请向前看 here 供参考。