【问题标题】:ReactJS showing list of itemsReactJS 显示项目列表
【发布时间】:2017-01-05 06:58:24
【问题描述】:

我有一个对象数组(某个项目的 cmets 列表),我想在页面上显示它。但并非所有这些 cmets!例如前 10 个。在该列表下方,我想呈现一些按钮。如果用户想要查看接下来的 10 个 cmets,他需要单击该按钮。

类似“Youtube”中的“显示更多”。

我可以渲染所有这些 cmets!但我不需要那个。每次单击按钮时,我需要显示 10 个 cmets。

谁能帮帮我 谢谢

【问题讨论】:

  • 请展示您到目前为止所尝试的内容,或者发布一些代码来说明您遇到的问题。
  • 我假设(从标签)您从助焊剂商店获得 cmets。与其获取所有 cmets,然后在组件中进行过滤,不如从服务器中仅获取 10 个 cmets,并构建一个新的通量操作,例如 LOAD_MORE_COMMENTS,当用户单击按钮时将调用该操作,这将使ajax 调用完成数据集。
  • @Pandaiolo 这是最好的选择。让服务器处理传递给客户端的 cmets 数量。

标签: javascript reactjs redux flux


【解决方案1】:

从下面的代码中,您可以了解如何从头开始实现loadmore 组件,

import React, { Component } from 'react';

class Router extends Component {
  constructor() {
    super();
    this.data = [1, 2, 3, 4, 5, 6, 7, 8, 9, 6, 4, 3, 2, 1, 5];
    this.state = {
      count: 5,
      defaultCount: 5,
    };
  }
  handleCount() {
    let count = this.state.defaultCount;
    count = count + this.state.count;
    this.setState({ count });
  }
  render() {
    const count = this.state.count;
    const showData = (item, index) => {
     return ((index < count) ? <li>{item}</li> : '');
    };
 return (
   <div>
     {this.data.map(showData)}
     <a href="#" onClick={this.handleCount.bind(this)}>Load</a>
   </div>
  );
 }
}

我在这里做了什么:

i) 取一个包含 15 个元素的数组;

ii) 使用countdefaultcount 初始化状态

iii) 然后我映射data 数组以在showData 函数上显示项目

iV) 在showData 函数的return 上,我检查了index of array element 是否小于count 变量。

v) 并且每次单击loadmore 按钮时,它都会调用handleCount 函数并通过defaultCount 创建count 值。

vi) count 变量更新后超过 5 个数组元素将显示在此示例中

就是这样,希望你了解lodemore的基本概念

【讨论】:

    【解决方案2】:

    所以让我们假设一个数组中有 20 个 cmets

    var comments = getComments() // returns list of 20 comments
    

    然后你可以使用slice获取前10个cmets,然后将它们映射到实际的HTML

    var commentsAsHTML = comments.slice(0, this.state.limitTo).map(comment => {
       return <li key={comment.id}>{comment.text}</li>
    });
    

    要添加“加载更多”功能,我们将拥有limitTo 状态

    limitTo = 10;
    

    例如,对于每个“加载更多”操作,我们会将此限制增加 10

    onLoadMore () {
       this.setState({
          limitTo: this.state.limitTo + 10
       });
    }
    

    【讨论】:

    • 如果您的应用必须扩展到许多(数千)个 cmets,则此实现将出现问题 - 请参阅我对原始问题的评论
    • @Pandaiolo 你说得对,我刚刚针对他的当前情况实施了一个解决方案。也许他无法更改 API。
    • comments.slice(0, 10).map(... 应该是comments.slice(0, this.state.limitTo).map(...
    猜你喜欢
    • 1970-01-01
    • 2012-01-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-15
    • 2020-01-24
    • 2020-07-23
    • 2020-07-02
    相关资源
    最近更新 更多