javascript - 如何在 React JS 中像 AngularJS 一样对数组进行排序

标签 javascript reactjs

在 AngularJS 中可以对这样的数组进行排序 ng-repeat="user in users | orderBy: order" 我需要知道在 ReactJS 中如何做到这一点,这里是一个例子AngularJS

const myApp = angular.module('myApp', [])
myApp.controller('myAppController', ['$scope', $scope => {
  $scope.users = [
    { name: 'Maria', age: 16, color: 'red' },
    { name: 'Mike', age: 18, color: 'black' },
    { name: 'John', age: 23, color: 'green' },
    { name: 'Liza', age: 21, color: 'yellow' }
  ]
  $scope.order = 'name'
  $scope.orderBy = orderBy => $scope.order = orderBy
}])
<script src="https://cdnjs.cloudflare.com/ajax/libs/angular.js/1.7.5/angular.min.js"></script>
<table ng-app="myApp" ng-controller="myAppController">
  <tr>
    <th ng-click="orderBy('name')">Name</th>
    <th ng-click="orderBy('age')">Age</th>
    <th ng-click="orderBy('color')">Color</th>
  </tr>
  <tr ng-repeat="user in users | orderBy: order">
    <td>{{user.name}}</td>
    <td>{{user.age}}</td>
    <td>{{user.color}}</td>
  </tr>
</table>

最佳答案

React.js 是一个普通的 JavaScript。
您应该使用Array.prototype.sort
创建stackblitz为你。

import React, { Component } from 'react';
import { render } from 'react-dom';
import Hello from './Hello';
import './style.css';

class App extends Component {
  constructor() {
    super();
    this.state = {
      name: 'React',
      order: 'name',
      users: [
        { name: 'Maria', age: 16, color: 'red' },
        { name: 'Mike', age: 18, color: 'black' },
        { name: 'John', age: 23, color: 'green' },
        { name: 'Liza', age: 21, color: 'yellow' }
      ]
    };
    this.sort = this.sort.bind(this); 
    this.setOrder = this.setOrder.bind(this); 
  }

  setOrder(e) {
    const order = e.target.dataset.order;

    this.setState({order});
  }

  sort(a, b) {
    if (!this.state.order) return 0;
    if(a[this.state.order] < b[this.state.order]) { return -1; }
    if(a[this.state.order] > b[this.state.order]) { return 1; }
    return 0;
  }

  render() {
    return (
      <div>
        <button data-order='name' onClick={this.setOrder}>by name</button>
        <button data-order='color' onClick={this.setOrder}>by color</button>
        {this.state.users.sort(this.sort).map(user => <div>name: {user.name}, color: {user.color}</div>)}
      </div>
    );
  }
}

render(<App />, document.getElementById('root'));

关于javascript - 如何在 React JS 中像 AngularJS 一样对数组进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59089254/

相关文章:

javascript - 无法导入模块的 css 文件

reactjs - Ant Design - 复选框的垂直组

javascript - 重复 React 高阶组件的缺点是什么?

javascript - 为什么在react.js文档( "tutorial"部分)中描述了拥有正在运行的服务器的必要性?

javascript - 从 iframe 中选择具有相同类名的两个 DIV 中的第二个

javascript - 为什么原型(prototype)中的 mousedown 之后无法添加 mousemove 事件?

reactjs - 如何更改 Material ui datepicker 语言和默认时区?

javascript - React依赖模块正在父模块中寻找图像源

javascript - HTML5 可以通过 video 标签播放 .mpd Manifest 文件吗?

javascript - 如何在 <div> 标签内 .append() 用户输入?