Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/26.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-异步数组映射_Javascript_Reactjs_React Native - Fatal编程技术网

JavaScript/React-异步数组映射

JavaScript/React-异步数组映射,javascript,reactjs,react-native,Javascript,Reactjs,React Native,我正在使用React Native。我想创建一个非常长的列表。 列表组件中的每个元素都是一个列表项组件。 我的问题是组件加载时间太长。该列表是使用数组.map()创建的。 请看一下代码 我的问题是,是否有可能创建异步映射(),这样列表中的元素将一个接一个地加载,而组件不会等待那么久 尝试过类似的东西,但对我来说没有任何效果。有人能帮忙吗 class List extends React.Component { render() { // very big array

我正在使用React Native。我想创建一个非常长的列表。 列表组件中的每个元素都是一个列表项组件。 我的问题是组件加载时间太长。该列表是使用数组.map()创建的。 请看一下代码

我的问题是,是否有可能创建异步映射(),这样列表中的元素将一个接一个地加载,而组件不会等待那么久

尝试过类似的东西,但对我来说没有任何效果。有人能帮忙吗

class List extends React.Component {
    render() {
        // very big array
        var list = [...Array(5000).keys()];
        return (
            <Content>
                {
                    list.map((item, index) => {
                        return (
                            <ListItem text={item} key={index}/>
                        );
                    })
                }
            </Content>
        );
    }
}

class ListItem extends React.Component {
    render() {
        return (
            <Button>
                <Text>{this.props.text}</Text>
            </Button>
        );
    }
}
类列表扩展了React.Component{
render(){
//超大阵列
var list=[…数组(5000).keys()];
返回(
{
list.map((项目、索引)=>{
返回(
);
})
}
);
}
}
类ListItem扩展了React.Component{
render(){
返回(
{this.props.text}
);
}
}

您链接到的异步映射代码可以正常工作,但它并不能满足您的需要。从阵列中渲染5000个组件所需的时间仍然需要很长时间,async只允许您在完成时异步执行操作

从用户体验的角度来看,几乎不需要渲染那么多元素。相反,您应该根据需要加载数据(用户向下滚动到某一点)

选项1

因此,数据流逻辑如下所示:

  • 加载要显示的前100个条目
  • 用户需要更多条目 (进一步向下滚动列表)因此您可以提出请求
  • 加载 接下来要显示的100个条目
  • 如果您使用API与数据接口,则这是一种常见的模式

    选项2


    如果内存中有数组,可以尝试使用array.slice()将数组划分为更小的块,并异步呈现每个块。

    您链接到的异步映射代码可以工作,但它无法完成您希望它完成的任务。从阵列中渲染5000个组件所需的时间仍然需要很长时间,async只允许您在完成时异步执行操作

    从用户体验的角度来看,几乎不需要渲染那么多元素。相反,您应该根据需要加载数据(用户向下滚动到某一点)

    选项1

    因此,数据流逻辑如下所示:

  • 加载要显示的前100个条目
  • 用户需要更多条目 (进一步向下滚动列表)因此您可以提出请求
  • 加载 接下来要显示的100个条目
  • 如果您使用API与数据接口,则这是一种常见的模式

    选项2


    如果内存中有数组,可以尝试使用array.slice()将数组划分为较小的块,并异步呈现每个块。

    使用异步无法解决此问题。数组的大小很大,映射意味着运行for循环,所以for循环for(比如说5000个项目)需要时间

    限制数组的大小,或者根据需要以100个为一组递增 去吧


    使用async无法解决此问题。数组的大小很大,映射意味着运行for循环,所以for循环for(比如说5000个项目)需要时间

    限制数组的大小,或者根据需要以100个为一组递增 去吧


    因此列表中的元素将一个接一个地加载,组件不会等待太多时间
    如果组件“不等待”,5000个列表项将如何呈现?@JaromandaX这正是我试图实现的…:)您可以使用延迟加载,在这种加载中,先加载10个项目,然后在用户向下滚动时加载额外的10个项目。加载下10项时,只需将其附加到现有列表中。@AnilKumar这不是所需的行为。他们应该一个接一个地加载,直到立即结束。我只是不想让组件等待…
    这样列表中的元素会一个接一个地加载,而组件不会等待那么久
    如果组件“不等待”,5000个列表项将如何呈现?@JaromandaX这正是我试图实现的…)您可以使用延迟加载,在这种加载中,先加载10个项目,然后在用户向下滚动时加载额外的10个项目。加载下10项时,只需将其附加到现有列表中。@AnilKumar这不是所需的行为。他们应该一个接一个地加载,直到立即结束。我只是不想让组件等待。。。