【问题标题】:Sorting Table Semantic UI React not working?排序表语义 UI React 不起作用?
【发布时间】:2020-09-24 07:51:36
【问题描述】:

大家好,我刚刚从网站上完全复制了来自 React Semantic Ui https://react.semantic-ui.com/collections/table/#variations-sortable 的 DataTable 的代码,一切正常,除了降序排序不起作用,当我第一次单击时它按升序排序但是当我再次单击时(控制台打印降序)但表格中没有任何变化。

import _ from 'lodash'
import React from 'react'
import { Table } from 'semantic-ui-react'

const tableData = [
  { name: 'John', age: 15, gender: 'Male' },
  { name: 'Amber', age: 40, gender: 'Female' },
  { name: 'Leslie', age: 25, gender: 'Other' },
  { name: 'Ben', age: 70, gender: 'Male' },
]

function exampleReducer(state, action) {
  switch (action.type) {
    case 'CHANGE_SORT':
      if (state.column === action.column) {
        return {
          ...state,
          data: state.data.reverse(),
          direction:
            state.direction === 'ascending' ? 'descending' : 'ascending',
        }
      }

      return {
        column: action.column,
        data: _.sortBy(state.data, [action.column]),
        direction: 'ascending',
      }
    default:
      throw new Error()
  }
}

function TableExampleSortable() {
  const [state, dispatch] = React.useReducer(exampleReducer, {
    column: null,
    data: tableData,
    direction: null,
  })
  const { column, data, direction } = state

  return (
    <Table sortable celled fixed>
      <Table.Header>
        <Table.Row>
          <Table.HeaderCell
            sorted={column === 'name' ? direction : null}
            onClick={() => dispatch({ type: 'CHANGE_SORT', column: 'name' })}
          >
            Name
          </Table.HeaderCell>
          <Table.HeaderCell
            sorted={column === 'age' ? direction : null}
            onClick={() => dispatch({ type: 'CHANGE_SORT', column: 'age' })}
          >
            Age
          </Table.HeaderCell>
          <Table.HeaderCell
            sorted={column === 'gender' ? direction : null}
            onClick={() => dispatch({ type: 'CHANGE_SORT', column: 'gender' })}
          >
            Gender
          </Table.HeaderCell>
        </Table.Row>
      </Table.Header>
      <Table.Body>
        {data.map(({ age, gender, name }) => (
          <Table.Row key={name}>
            <Table.Cell>{name}</Table.Cell>
            <Table.Cell>{age}</Table.Cell>
            <Table.Cell>{gender}</Table.Cell>
          </Table.Row>
        ))}
      </Table.Body>
    </Table>
  )
}

export default TableExampleSortable

【问题讨论】:

    标签: reactjs datatable semantic-ui


    【解决方案1】:

    也许reducer不喜欢它的状态被直接操纵的事实:state.data.reverse(),所以我试图解决它

    1. 使用 lodash 方法对data: _.reverse(_.clone(state.data))进行排序和克隆。

    2. 不使用 lodash data: state.data.slice().reverse() 两种方式似乎都有效。

    【讨论】:

    • 非常感谢您的回答。我正用头撞墙,因为我确实有文档中完全相同的代码,但它不起作用。
    猜你喜欢
    • 1970-01-01
    • 2021-08-22
    • 2017-03-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多