Нужна помощь в построении логики для таблицы реакции

У меня очень небольшая проблема, но я новый разработчик и впервые учусь реагировать, и мне очень трудно ее решить.

Проблема:

У меня есть компонент с именем Table, я визуализирую внутри него другой компонент с именем TableRow, перебирая другие элементы. В компоненте строки таблицы я визуализирую строки. У меня есть строки данных примерно так:

1: [a]
2: [a,b]
3: [a]

Я хочу вывести что-то вроде этого

1  a
2  a
   b
3  a

Я могу добиться такого результата

1  a
2  a
2  b
3  a

но получить точный результат очень сложно. В компоненте строки таблицы я просто просматриваю элементы и отображаю их, я должен включить логин, в котором я могу проверить, доступен ли заголовок для 2, не помещать его и вставлять только часть данных. Как этого добиться. Любая помощь будет оценена по достоинству. Спасибо.

data: [
{
  header: header
  items: [1]
},
{
   header: header2,
   items: [1,2]
 },
{
   header: header3,
    items: [1,2]
 }
 ]

Образец кода:

<Table>
    this.props.data.map(obj => {
        return <NewComponent header = {obj.header} items = {obj.items} />
    })
</Table>

<NewComponent> 
    this.props.items.map(item=> {
        <TableRow> 
                <th> {this.props.header} </th>
                <tb> {item} </tb>
        </TableRow>
    })
</NewComponent>

Текущий выход:

1 1
2 1
2 2 
3 1

я хочу

1  1
2  1
   2
3  1

Любая помощь будет оценена по достоинству.


person Parkash kumar    schedule 24.07.2019    source источник
comment
Что такое this.props.header, это первый столбец?   -  person John Ruddell    schedule 24.07.2019
comment
да это первая колонка. @JohnRuddell   -  person Parkash kumar    schedule 24.07.2019
comment
тогда как он изменится с 1 на 2 на 3? это не исходит от item, который вы отображаете.   -  person John Ruddell    schedule 24.07.2019
comment
О, nvm, это происходит из родительского сопоставления. таблица отображается несколько раз .. понятно.   -  person John Ruddell    schedule 24.07.2019
comment
Предоставьте пример заголовков this.props.items и this.props.header в своем коде.   -  person lissitz    schedule 24.07.2019


Ответы (1)


Просто условно отобразите значение заголовка, если это первый проход

<Table>
    this.props.items.map( (item, idx), => 
        <TableRow> 
            <TableHeader>{idx === 0 ? this.props.header : ''}<TableHeader>
            <TableBody>body>item<TableBody>
        </TableRow>
    )
</Table>

Редактировать

вот пример после вашего обновления.

const Table = (props) => {
    const { data } = props;
    return (
      <table>
        <tbody>
          {data.map((row, idx) => (
            <TableRow header={row.header} items={row.items} />
          ))}
        </tbody>
      </table>
    );
  }
}

const TableRow = ({ header, items }) => {
  return items.map((item, idx) => (
    <tr>
      <td>{idx === 0 ? header : " "}</td>
      <td>{item}</td>
    </tr>
  ));
};

Вот простой пример для игры

person John Ruddell    schedule 24.07.2019
comment
Привет, @johnRuddel. Мне очень жаль, но я не смог правильно это объяснить. Я разместил это снова, чтобы помочь вам лучше понять. Ваш подход хорош, но это создаст три таблицы. (ссылаясь на пример) - person Parkash kumar; 24.07.2019
comment
Конечно, в моем примере я поместил таблицы, потому что я не знаю, какие элементы вы используете для Table _2 _... и т. Д., Но код, который здесь, такой же, как в вашем вопросе, за исключением условного, которое я добавил idx === 0 ? this.props.header : '' - person John Ruddell; 24.07.2019
comment
Ах, ты только что изменил код, понял. это нормально, тогда просто переместите элемент таблицы за пределы компонента строки. - person John Ruddell; 24.07.2019
comment
Не понял, извини, я новенький. :) @johnRuddell - person Parkash kumar; 24.07.2019
comment
@SagarKumar нравится это. codeandbox.io/s/react-example-32m65. Просто визуализируйте строку вместо таблицы. - person John Ruddell; 24.07.2019
comment
Ха-ха, рад помочь :) дайте мне знать, если вам еще что-нибудь понадобится :) - person John Ruddell; 24.07.2019
comment
да. Еще раз спасибо. это именно то, что я хотел. - person Parkash kumar; 24.07.2019