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?
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.
<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.
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;
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;
@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
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