Ant-design: Cada registro na tabela deve ter uma propriedade `key` Ășnica, ou definir` rowKey` como uma chave primĂĄria Ășnica.

Criado em 15 set. 2017  Â·  16ComentĂĄrios  Â·  Fonte: ant-design/ant-design

Estou tentando descobrir como posso obter chaves exclusivas para cada registro.

Até agora, meu código se parece com este:

let lastIndex = 0
const updateIndex = () => {
  lastIndex++
  return lastIndex
}

...

constructor() {
  super()

  this.state = {
    columns: [ {
      title: 'Nombre',
      dataIndex: 'name',
      key: `name${updateIndex()}`
    }, {
      title: 'Precio',
      dataIndex: 'price',
      key: `price${updateIndex()}`
    }, {
      title: 'Precio regular',
      dataIndex: 'regularPrice',
      key: `regularPrice${updateIndex()}`
    }, {
      title: 'CategorĂ­a(s)',
      key: `id${updateIndex()}`,
      render: (text, record) => (
        <span>
          {
            record.categories.map((r, index) => (
              <span key={index}>
                {
                  index > 0 &&
                  <span className="ant-divider"/>
                }
                <span>{r.name}</span>
              </span>
            ))
          }
        </span>
      )
    }, {
      title: 'Action',
      key: `id${updateIndex()}`,
      render: (text, record) => (
        <span>
          <a href="#">Editar - {record.name}</a>
          <span className="ant-divider"/>
          <a href="#" style={{color: 'red'}}>Borrar</a>
        </span>
      )
    }, ]
  }
}

Mas ainda estou recebendo o erro de que cada registro na tabela deve ter um key exclusivo.

Qual seria a melhor forma de o conseguir?

Invalid

ComentĂĄrios muito Ășteis

@ahmetkuslular A mensagem de erro Ă© bastante explĂ­cita, seu conjunto de dados deve conter itens com uma propriedade de chave neles ou vocĂȘ deve especificar a propriedade rowKey no componente Tabela com o nome de um campo em seu conjunto de dados que Ă© exclusivo para cada linha.

CĂłdigo Fonte Aqui

<Table 
  columns={columns} 
  dataSource={this.props.categories} 
  rowKey="name" 
/>

Todos 16 comentĂĄrios

OlĂĄ @johhansantana , seu problema foi encerrado porque nĂŁo estĂĄ em conformidade com nossos requisitos. Use o Assistente de Problemas para criar um problema, obrigado!

Isso significa a chave de seus dados, nĂŁo colunas.

Eu tenho o mesmo problema. Como podemos resolver isso? @ ant-design-bot @ afc163

Com as colunas, se nĂŁo for definida a propriedade dataIndex, a chave da coluna deve ser definida como uma chave exclusiva.

@johhansantana key not unique ↓

tĂ­tulo: 'CategorĂ­a (s)',
chave: `id $ {updateIndex ()}`,
...
título: 'Ação',
chave: `id $ {updateIndex ()}`,

NĂŁo entendi totalmente o que tĂ­nhamos que fazer. @lijinlone

@ahmetkuslular A mensagem de erro Ă© bastante explĂ­cita, seu conjunto de dados deve conter itens com uma propriedade de chave neles ou vocĂȘ deve especificar a propriedade rowKey no componente Tabela com o nome de um campo em seu conjunto de dados que Ă© exclusivo para cada linha.

CĂłdigo Fonte Aqui

<Table 
  columns={columns} 
  dataSource={this.props.categories} 
  rowKey="name" 
/>

Este também foi confuso para mim, porque eu estava confundindo as teclas COLUMN com as teclas ROW. Este erro não tem nada a ver com a "chave" na configuração da sua coluna.

O Ant espera que vocĂȘ tenha uma chave exclusiva especificamente chamada de "chave" em cada linha de dados, assim:

{ key: 1, value: 'foo'}

Em vez disso, meus dados tinham "id":

{ id: 1, value: 'foo'}

Para resolver isso, adicionei uma propriedade rowKey Ă  minha Tabela, assim:

<Table columns={this.columns} dataSource={this.state.results} rowKey='id' />

<Table .... rowKey={record => record.countryId} ... /> consertou para mim.
countryId sendo um valor Ășnico em cada campo de item em seus dados.

Na tabela de design do Ant, o tipo de propriedade rowKey Ă© string.
EntĂŁo, eu adicionei como string usando uuid. entĂŁo resolvi o erro.

Ei pessoal, adicionar rowKey Ă  tabela resolveu meu problema
<Table rowKey = "id" ..... />

e 'id' Ă© a chave de uma das colunas dentro da tabela como -
colunas const = [
{
tĂ­tulo: '#',
dataIndex: data.id,
chave: 'id',
},
{
nome do tĂ­tulo',
dataIndex: 'nome',
chave: 'nome',
},
.
.
sim e meu id Ă© uma string Ășnica tambĂ©m. Com essa mudança, posso ver que as colunas tĂȘm um id definido como propriedade 'data-row-key' para cada coluna e nenhum aviso agora.

solução 1

cada coluna tem um Ășnico key

// each column with unique key

import React from 'react';

import {
  Table,
} from 'antd';

const leftTableColumns = [
  {
    title: 'Page / Modal',
    dataIndex: 'pageModal',
    key: 'pageModal',
  },
  {
    title: 'Success Rate',
    dataIndex: 'successRate',
    key: 'successRate',
  },
];

const LeftTable = (props) => {
  const {
    leftTableDatas,
  } = props;
  return (
    <>
      <Table
        columns={leftTableColumns}
        dataSource={leftTableDatas}
      />
    </>
  );
};

export {
  LeftTable,
};

export default LeftTable;


solução 2

sĂł precisa definir rowkey na tabela com valor Ășnico

// table with rowkey

import React from 'react';

import {
  Table,
} from 'antd';

const leftTableColumns = [
  {
    title: 'Page / Modal',
    dataIndex: 'pageModal',
  },
  {
    title: 'Success Rate',
    dataIndex: 'successRate',
  },
];

const LeftTable = (props) => {
  const {
    leftTableDatas,
  } = props;
  return (
    <>
      <Table
        // shorthand rowKey
        rowkey="id"
        // rowKey={obj => obj.id}
        columns={leftTableColumns}
        dataSource={leftTableDatas}
      />
    </>
  );
};

export {
  LeftTable,
};

export default LeftTable;


ref

https://ant.design/components/table/

image

@xgqfrms , na solução 2, vocĂȘ pode encurtar o rowKey prop para rowkey="id" . Funciona da mesma forma.

O que estou recebendo Ă© esta mensagem

Warning: Each child in a list should have a unique "key" prop.

Check the render method of `TableRow`. See https://fb.me/react-warning-keys for more information.
    in TableCell (created by TableRow)
    in TableRow (created by Connect(TableRow))
    in Connect(TableRow) (created by ExpandableRow)

indicando que o problema no TableCell , mas como posso definir o key prop lĂĄ?

Percebi que os exemplos na pĂĄgina Antd nĂŁo estĂŁo gerando esse erro.

Obrigado pela ajuda.

O que estou recebendo Ă© esta mensagem

Warning: Each child in a list should have a unique "key" prop.

Check the render method of `TableRow`. See https://fb.me/react-warning-keys for more information.
    in TableCell (created by TableRow)
    in TableRow (created by Connect(TableRow))
    in Connect(TableRow) (created by ExpandableRow)

Ei, eu acabei de descobrir. Em columns prop, vocĂȘ precisa ter dataIndex ou key .

É mencionado nesta seção: https://ant.design/components/table/#Column

@tuanalumi , obrigado por apontar isso, adicionei key e nĂŁo estou mais recebendo esse aviso!

Este também foi confuso para mim, porque eu estava confundindo as teclas COLUMN com as teclas ROW. Este erro não tem nada a ver com a "chave" na configuração da sua coluna.

O Ant espera que vocĂȘ tenha uma chave exclusiva especificamente chamada de "chave" em cada linha de dados, assim:

{ key: 1, value: 'foo'}

Em vez disso, meus dados tinham "id":

{ id: 1, value: 'foo'}

Para resolver isso, adicionei uma propriedade rowKey Ă  minha Tabela, assim:

<Table columns={this.columns} dataSource={this.state.results} rowKey='id' />

consertou para mim, obrigado

Esta pĂĄgina foi Ăștil?
0 / 5 - 0 avaliaçÔes

QuestÔes relacionadas

tianyacsdn picture tianyacsdn  Â·  3ComentĂĄrios

Orbyt picture Orbyt  Â·  3ComentĂĄrios

tangsj picture tangsj  Â·  3ComentĂĄrios

plandem picture plandem  Â·  3ComentĂĄrios

ryannealmes picture ryannealmes  Â·  3ComentĂĄrios