简体   繁体   English

如何对数据排序并在reactjs中显示?

[英]How to sort data and display it in reactjs?

I want to display projects in sorted manner when user clicks on sort by funds then it should display the projects in sorted by funds but my code is not working why so ? 当用户单击按资金排序时,我想按排序方式显示项目,然后按资金排序时显示项目,但是我的代码不起作用,为什么? I am importing the sortBy() function and using it when user clicks on the button. 我正在导入sortBy()函数,并在用户单击按钮时使用它。

home.js: home.js:

import React, { Component } from 'react';
import Card from '../common/card';
import Projects from '../../data/projects';
import { sortBy } from './helper';

    export default class Home extends Component {

      constructor(props) {
        super(props);
        this.state = {
          projects: Projects
        }
      }

      render() {

        return (
          <div>
              <div className="header">
                <div className="buttonContainer">
                  <div>
                      <button className="btn btn-primary mycustom dropdown-toggle mr-4" type="button" data-toggle="dropdown" aria-haspopup="true"
                      aria-expanded="false">Sort by </button>

                      <div className="dropdown-menu">
                          <a className="dropdown-item" href="#" onClick={() => sortBy('funded')}>Percentage fund</a>
                          <a className="dropdown-item" href="#" onClick={() => sortBy('backers')}>Number of backers</a>
                      </div>
                  </div>
                </div>
              </div>
              <div class="container-fluid">
                <div class="row">
                  {this.state.projects.map( (val,index) => (
                    <div class="col-3">
                      <Card title={val.title} by={val.by} blurb={val.blurb} 
                      url={val.url} funded={val.funded} backers={val.backers} imgurl={index}/>
                    </div>
                  ))}
                </div>
              </div>
          </div>
        )
      }
    }

helper.js: helper.js:

import projects from '../../data/projects';

export function sortBy (searchTerm) {
    if(searchTerm === 'funded'){
        return projects.sort((a,b) => a.funded - b.funded);
    }else if(searchTerm === 'backers'){
        return projects.sort((a,b) => a.backers - b.backers);
    }
}

projects.js: projects.js:

http://jsfiddle.net/0z8xcf1o/ http://jsfiddle.net/0z8xcf1o/

  1. In your render function, you should iterate over this.state.projects instead of Projects 在渲染函数中,应该遍历this.state.projects而不是Projects
  2. You need to update your state on every sort 您需要更新各种状态
  3. Your sortBy function can be simplified, it should set the state for you, and it would be better to add it to the component: 您的sortBy函数可以简化,它应该为您设置状态,最好将其添加到组件中:

- --

sortBy(searchTerm) {
  this.setState({ projects: [...Projects].sort((a, b) => a[searchTerm] - b[searchTerm]) });
}

and then call it with 然后用

onClick={() => this.sortBy('funded')}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM