React-Table фиксированный первый ряд - PullRequest
2 голосов
/ 14 марта 2019

Для начала я прочитал этот пост об использовании нижних колонтитулов для исправления последней строки , а также всей этой цепочки при игнорировании верхней строки при сортировке . На самом деле, я прочитал эту ветку несколько раз.

Темы не дают окончательного ответа о том, как закрепить верхнюю строку с таблицей реагирования, но это очень важно для моего текущего проекта, и я ищу решение. Я создал следующую фиктивную таблицу для помощи с этим постом:

var ReactTable = ReactTable.default
class App extends React.Component {
  constructor() {
    super();
    this.state = {
      data: [
        { firstName: 'joe', lastName: 'james', age: 18, status: 'real', visits: 14 },
        { firstName: 'tom', lastName: 'smith', age: 15, status: 'okay', visits: 24 },
        { firstName: 'tom', lastName: 'smith', age: 15, status: 'okay', visits: 24 },
        { firstName: 'tom', lastName: 'smith', age: 15, status: 'okay', visits: 24 },
        { firstName: 'tom', lastName: 'smith', age: 15, status: 'okay', visits: 24 }
      ]
    };
  }
  render() {
    const { data } = this.state;
    return (
      <div>
        <ReactTable
          data={data}
          columns={[
            {
              Header: "Name",
              columns: [
                {
                  width: '100',
                  Header: "First Name",
                  accessor: "firstName"
                },
                {
                  width: '100',
                  Header: "Last Name",
                  id: "lastName",
                  accessor: d => d.lastName
                }
              ]
            },
            {
              Header: "Info",
              columns: [
                {
                  width: '100',
                  Header: "Age",
                  accessor: "age"
                },
                {
                  width: '100', 
                  Header: "Status",
                  accessor: "status"
                }
              ]
            },
            {
              Header: 'Stats',
              columns: [
                {
                  width: '100',
                  Header: "Visits",
                  accessor: "visits"
                }
              ]
            }
          ]}
          defaultPageSize={5}
          showPagination={false}
          className="-striped -highlight"
        />
        <br />

      </div>
    );
  }
}

ReactDOM.render(<App />, document.getElementById("app"));
<link href="https://cdnjs.cloudflare.com/ajax/libs/react-table/6.5.3/react-table.css" rel="stylesheet"/>

<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react-dom.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react-table/6.5.3/react-table.js"></script>

<div id="app"></div>

Моя цель в настоящее время - создать фиксированный верхний ряд любым возможным способом . Является ли это тем, что (а) имеет желаемые данные первой строки в качестве первого объекта в массиве data, или (b) имеет желаемые данные первой строки в объекте, который полностью отделен от массива data, и кодируя это в header столбца, или (c) какой-то другой подход, я не возражаю, если он немного хакерский. По крайней мере, кажется, что в любом случае такого подхода не существует. Не стесняйтесь создавать фиктивные данные за пределами data, если вы можете закрепить их как верхний ряд.

Я бы хотел стилизовать фиксированный первый ряд иначе, чем как заголовки над ним, так и ряды под ним. Ради этого поста достаточно было бы получить простое оформление для этой строки (например, другой цвет фона)!

Этот сайт здесь (не встроенный в React tho) имеет отличный пример фиксированной первой строки. При сортировке таблицы строка Totals остается сверху. Он также стилизован отдельно от других строк.

Заплатит этот пост через 2 дня, а также любые ответы заранее, так как я мог бы действительно действительно воспользоваться помощью. Любые мысли / помощь приветствуется!

Редактировать: - еще одно предложение (хотя я не знаю, как это можно сделать) - просто переставить React-Table Footer в качестве первой строки между заголовками и данными. Footer невосприимчив к сортировке, хотя он снизу, а не сверху.

Редактировать 2: - для этой темы , невозможно создать третью группу headerGroup, которая была бы необходима, так как в таблицах моих веб-сайтов уже есть headerGroup и другой основной заголовок.

1 Ответ

1 голос
/ 14 марта 2019

Добавить вариант стиля с высотой

style={{
    height: "200px"
}}

var ReactTable = ReactTable.default
class App extends React.Component {
  constructor() {
    super();
    this.state = {
      data: [
        { firstName: 'joe', lastName: 'james', age: 18, status: 'real', visits: 14 },
        { firstName: 'tom', lastName: 'smith', age: 15, status: 'okay', visits: 24 },
        { firstName: 'tom', lastName: 'smith', age: 15, status: 'okay', visits: 24 },
        { firstName: 'tom', lastName: 'smith', age: 15, status: 'okay', visits: 24 },
        { firstName: 'tom', lastName: 'smith', age: 15, status: 'okay', visits: 24 }
      ]
    };
  }
  render() {
    const { data } = this.state;
    return (
      <div>
        <ReactTable
          data={data}
          columns={[
            {
              Header: "Name",
              columns: [
                {
                  width: '100',
                  Header: "First Name",
                  accessor: "firstName"
                },
                {
                  width: '100',
                  Header: "Last Name",
                  id: "lastName",
                  accessor: d => d.lastName
                }
              ]
            },
            {
              Header: "Info",
              columns: [
                {
                  width: '100',
                  Header: "Age",
                  accessor: "age"
                },
                {
                  width: '100', 
                  Header: "Status",
                  accessor: "status"
                }
              ]
            },
            {
              Header: 'Stats',
              columns: [
                {
                  width: '100',
                  Header: "Visits",
                  accessor: "visits"
                }
              ]
            }
          ]}
          defaultPageSize={5}
          showPagination={false}
          style={{
               height: "200px"
          }}
          className="-striped -highlight"
        />
        <br />

      </div>
    );
  }
}

ReactDOM.render(<App />, document.getElementById("app"));
<link href="https://cdnjs.cloudflare.com/ajax/libs/react-table/6.5.3/react-table.css" rel="stylesheet"/>

<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react-dom.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react-table/6.5.3/react-table.js"></script>

<div id="app"></div>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...