Порядок столбцов сетки Semantic UI

У меня есть упорядоченный список флажков (this.state.columns):

1. 2. 3. 4. 5. 6. ...

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

«1.» «2».

«3». «4».

«5.» «6.»

Это мой код:

<Grid stackable columns = {2}>
        {this.state.columns.map(
          data =>
            data.label !== ' ' && (
              <Grid.Column key = {data.key}>
                <Field
                  name = {data.key}
                  component = {fields.field.checkbox}
                  label = {data.label}
                  type = "checkbox"
                  control = {Checkbox}
                />
              </Grid.Column>
            )
        )}
</Grid>

Любые идеи о том, как это исправить? Мне нужно, чтобы отображалось вот так:

«1.» «4».

«2». «5.»

«3». «6.»

Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Навигация по приложениям React: Исчерпывающее руководство по React Router
Навигация по приложениям React: Исчерпывающее руководство по React Router
React Router стала незаменимой библиотекой для создания одностраничных приложений с навигацией в React. В этой статье блога мы подробно рассмотрим...
Массив зависимостей в React
Массив зависимостей в React
Все о массиве Dependency и его связи с useEffect.
0
0
601
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Я не уверен, что вы настроены на использование столбцов, но один из способов решить эту проблему - использовать контейнер сетки и серию элементов сетки размера 6.

<Grid container spacing = {24}>
        {this.state.columns.filter(d => d.label !== ' ')
          .reduce((map, d, i) => {
            let modulo = Math.ceil(this.state.columns.length/2)
            let row = [d]
            if (i+modulo < this.state.columns.length) {
                row.push(this.state.columns[i+modulo])
            }
            map = map.concatenate(row.map(data => 
                <Grid item key = {data.key} xs = {6}>
                <Field
                  name = {data.key}
                  component = {fields.field.checkbox}
                  label = {data.label}
                  type = "checkbox"
                  control = {Checkbox}
                />
              </Grid>))

           }, [])}
</Grid>
Ответ принят как подходящий

Грид может иметь Grid.Row, а он должен иметь Grid.Column.

Вы определили, что ваша сетка состоит из 2 столбцов; дерево компонентов для первых трех уровней должно выглядеть примерно так:

Grid
---- Grid.Row
--------- Grid.Column (GridColumn # 1)
--------- Grid.Column (GridColumn # 2)

GridColumn # 1 будет содержать данные, содержащиеся в this.state.columns а GridColumn # 2 будет содержать вторую половину.

Вы можете получить половину для GridColumn # 1, разрезав массив до половины его длины и от половины его длины для GridColumn # 2.

Обратите внимание, что вам необходимо настроить это для случаев, когда длина массива для this.state.columns нечетная. (в приведенном ниже примере я использовал Javascript для преобразования чисел с плавающей запятой в целые числа)

Вот один из способов реализовать это; он может выиграть от некоторого рефакторинга.

  renderCheckboxColumns() {
    const { columns } = this.state
    const leftColumns = columns.slice(0, (columns.length + 1 )/ 2).map(
      data =>
        <Grid.Row>
          <Grid.Column>{data}</Grid.Column>
        </Grid.Row>
    )

    const rightColumns = columns.slice((columns.length + 1)/ 2).map(
      data =>
        <Grid.Row>
          <Grid.Column>{data}</Grid.Column>
        </Grid.Row>
    )

    return (
      <Grid.Row>
        <Grid.Column>
          {leftColumns}
        </Grid.Column>
        <Grid.Column>
          {rightColumns}
        </Grid.Column>
      </Grid.Row>
    );
  }

  render() {
    return (
      <Grid stackable columns = {2}>
        {this.renderCheckboxColumns()}
      </Grid>

    );
  }

Другие вопросы по теме