当前位置: 首页 > 面试题库 >

使用React JS无限滚动

仰欣悦
2023-03-14
问题内容

我正在寻找使用React实现无限滚动的方法。我遇到了react-infinite-
scroll
,发现它效率低下,因为它只是将节点添加到DOM中,而不会删除它们。React是否有经过验证的解决方案,可以添加,删除和维护DOM中恒定数量的节点。

这是jsfiddle问题。在这个问题中,我想一次仅在DOM中包含50个元素。当用户上下滚动时,应加载和删除其他文件。由于它的优化算法,我们已经开始使用React。现在我找不到解决此问题的方法。我遇到过airbnb
Infinite
js
。但这是用Jquery实现的。要使用这个airbnb无限滚动,我必须放弃我不想做的React优化。

我想添加滚动的示例代码是(这里我正在加载所有项目。我的目标是一次仅加载50个项目)

/** @jsx React.DOM */

var Hello = React.createClass({
    render: function() {
        return (<li>Hello {this.props.name}</li>);
    }
});

var HelloList = React.createClass({ 
     getInitialState: function() {                            
         var numbers =  [];
         for(var i=1;i<10000;i++){
             numbers.push(i);
         }
         return {data:numbers};
     },

    render: function(){
       var response =  this.state.data.map(function(contact){          
          return (<Hello name="World"></Hello>);
        });

        return (<ul>{response}</ul>)
    }
});

React.renderComponent(<HelloList/>, document.getElementById('content'));

寻找帮助…


问题答案:

基本上,在滚动时,您想确定哪些元素是可见的,然后重新渲染以仅显示那些元素,顶部和底部的单个spacer元素代表屏幕外的元素。

Vjeux在这里做了一个小提琴,您可以看一下:jsfiddle。

滚动时执行

scrollState: function(scroll) {
    var visibleStart = Math.floor(scroll / this.state.recordHeight);
    var visibleEnd = Math.min(visibleStart + this.state.recordsPerBody, this.state.total - 1);

    var displayStart = Math.max(0, Math.floor(scroll / this.state.recordHeight) - this.state.recordsPerBody * 1.5);
    var displayEnd = Math.min(displayStart + 4 * this.state.recordsPerBody, this.state.total - 1);

    this.setState({
        visibleStart: visibleStart,
        visibleEnd: visibleEnd,
        displayStart: displayStart,
        displayEnd: displayEnd,
        scroll: scroll
    });
},

然后render函数将只显示range中的行displayStart..displayEnd
您可能也对ReactJS:双向双向无限滚动建模感兴趣。



 类似资料:
  • 无限滚动用来在页面滚动到接近底部时加载新内容或进行其他操作。 在底部的无限滚动 你只需在可滚动的容器上添加“infinite-scroll”类,一般是页面滚动区域 - div.content <style type="text/css"> .infinite-scroll-preloader { margin-top:-20px; } </style> <heade

  • 无限滚动用来在页面滚动到接近底部时加载新内容或进行其他操作。 无限滚动HTML结构 你只需在可滚动的容器上添加“infinite-scroll”类,一般是页面滚动区域 - <div class="page-content">: <div class="page"> <div class="page-content infinite-scroll" data-distance="100">

  • 问题内容: 我使用reactjs并想处理带事件的滚动。 首先,我使用绘制了帖子列表。 其次,通过按列表中的每个帖子,它将显示帖子详细信息并滚动到顶部(因为我将帖子详细信息置于页面的顶部位置)。 第三,通过单击帖子详细信息,它将返回以前的帖子列表,但是我希望网站将滚动到要单击的帖子的位置。 我这样使用: 单击事件以查看帖子详细信息: 我想获取的状态,然后可以按滚动到所点击帖子的位置。 问题答案: 这

  • 无限滚动 iScroll集成了一套智能缓存系统,它允许对一堆近乎无限的元素的数据进行处理和重用。目前无限滚动还处于早期开发阶段,所以虽然当前版本已经足够稳定,但是还没有做好广泛推广的准备。 具体示例请参考 无限滚动示例 ,并请提交你的建议和报告bug。 作者将会尽可能快的将功能变更的细节添加上来。

  • 滚动至底部时,加载更多数据。 基础用法 在要实现滚动加载的列表上上添加v-infinite-scroll,并赋值相应的加载方法,可实现滚动到底部时自动执行加载方法。 demo <template> <ul class="infinite-list" v-infinite-scroll="load" style="overflow:auto"> <li v-for="i in count

  • InfiniteScroll 无限滚动 滚动至底部时,加载更多数据。 基础用法 在要实现滚动加载的列表上上添加v-infinite-scroll,并赋值相应的加载方法,可实现滚动到底部时自动执行加载方法。 demo <template> <ul class="infinite-list" v-infinite-scroll="load" style="overflow:auto"> <