Ant-design: ν…Œμ΄λΈ”μ˜ 각 λ ˆμ½”λ“œμ—λŠ” κ³ μœ ν•œ 'key' μ†Œν’ˆμ΄ μžˆκ±°λ‚˜ 'rowKey'λ₯Ό κ³ μœ ν•œ κΈ°λ³Έ ν‚€λ‘œ μ„€μ •ν•΄μ•Ό ν•©λ‹ˆλ‹€.

에 λ§Œλ“  2017λ…„ 09μ›” 15일  Β·  16μ½”λ©˜νŠΈ  Β·  좜처: ant-design/ant-design

각 λ ˆμ½”λ“œμ— λŒ€ν•΄ κ³ μœ ν•œ ν‚€λ₯Ό 얻을 수 μžˆλŠ” 방법을 μ•Œμ•„ λ‚΄λ €κ³  λ…Έλ ₯ μ€‘μž…λ‹ˆλ‹€.

μ§€κΈˆκΉŒμ§€ λ‚΄ μ½”λ“œλŠ” λ‹€μŒκ³Ό κ°™μŠ΅λ‹ˆλ‹€.

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>
      )
    }, ]
  }
}

κ·ΈλŸ¬λ‚˜ ν…Œμ΄λΈ”μ˜ 각 λ ˆμ½”λ“œμ—λŠ” κ³ μœ ν•œ key κ°€ μžˆμ–΄μ•Ό ν•œλ‹€λŠ” 였λ₯˜κ°€ 계속 λ°œμƒν•©λ‹ˆλ‹€.

이것을 λ‹¬μ„±ν•˜λŠ” κ°€μž₯ 쒋은 방법은 λ¬΄μ—‡μž…λ‹ˆκΉŒ?

Invalid

κ°€μž₯ μœ μš©ν•œ λŒ“κΈ€

@ahmetkuslular 였λ₯˜ λ©”μ‹œμ§€λŠ” 데이터 μ„ΈνŠΈμ— ν‚€ 속성이 μžˆλŠ” ν•­λͺ©μ΄ ν¬ν•¨λ˜μ–΄ μžˆμ–΄μ•Ό ν•˜κ±°λ‚˜ 각 행에 κ³ μœ ν•œ 데이터 μ„ΈνŠΈ ν•„λ“œμ˜ 이름을 μ‚¬μš©ν•˜μ—¬ Table ꡬ성 μš”μ†Œμ— rowKey 속성을 지정해야 ν•œλ‹€λŠ” 였λ₯˜ λ©”μ‹œμ§€κ°€ 맀우 λΆ„λͺ…ν•©λ‹ˆλ‹€.

여기에 μ†ŒμŠ€ μ½”λ“œ

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

λͺ¨λ“  16 λŒ“κΈ€

@johhansantanaλ‹˜ , κ·€ν•˜μ˜ λ¬Έμ œλŠ” 문제 μš”κ΅¬ 사항을 μ€€μˆ˜ν•˜μ§€ μ•Šμ•„ μ’…λ£Œλ˜μ—ˆμŠ΅λ‹ˆλ‹€. 문제 λ„μš°λ―Έ λ₯Ό μ‚¬μš©ν•˜μ—¬ 문제λ₯Ό λ§Œλ“œμ„Έμš”. κ°μ‚¬ν•©λ‹ˆλ‹€!

μ΄λŠ” 열이 μ•„λ‹ˆλΌ λ°μ΄ν„°μ˜ ν‚€λ₯Ό μ˜λ―Έν•©λ‹ˆλ‹€.

λ‚˜λ„ 같은 문제λ₯Ό μ•ˆκ³ μžˆμ–΄. 이 문제λ₯Ό μ–΄λ–»κ²Œ ν•΄κ²°ν•  수 μžˆμŠ΅λ‹ˆκΉŒ? @ant-design-bot @afc163

dataIndex 속성이 μ„€μ •λ˜μ§€ μ•Šμ€ 컬럼의 경우 컬럼 ν‚€λŠ” 고유 ν‚€λ‘œ μ„€μ •λ˜μ–΄μ•Ό ν•©λ‹ˆλ‹€.

@johhansantana ν‚€κ°€ κ³ μœ ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€ ↓

제λͺ©: 'μΉ΄ν…Œκ³ λ¦¬',
ν‚€: `id${updateIndex()}`,
...
제λͺ©: 'μ•‘μ…˜',
ν‚€: `id${updateIndex()}`,

λ‚˜λŠ” μš°λ¦¬κ°€ 무엇을 ν•΄μ•Ό ν•˜λŠ”μ§€ μ™„μ „νžˆ μ΄ν•΄ν•˜μ§€ λͺ»ν–ˆμŠ΅λ‹ˆλ‹€. @lijinlone

@ahmetkuslular 였λ₯˜ λ©”μ‹œμ§€λŠ” 데이터 μ„ΈνŠΈμ— ν‚€ 속성이 μžˆλŠ” ν•­λͺ©μ΄ ν¬ν•¨λ˜μ–΄ μžˆμ–΄μ•Ό ν•˜κ±°λ‚˜ 각 행에 κ³ μœ ν•œ 데이터 μ„ΈνŠΈ ν•„λ“œμ˜ 이름을 μ‚¬μš©ν•˜μ—¬ Table ꡬ성 μš”μ†Œμ— rowKey 속성을 지정해야 ν•œλ‹€λŠ” 였λ₯˜ λ©”μ‹œμ§€κ°€ 맀우 λΆ„λͺ…ν•©λ‹ˆλ‹€.

여기에 μ†ŒμŠ€ μ½”λ“œ

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

COLUMN 킀와 ROW ν‚€λ₯Ό ν˜Όλ™ν–ˆκΈ° λ•Œλ¬Έμ— 이것은 λ‚˜μ—κ²Œλ„ ν˜Όλž€μŠ€λŸ¬μ› μŠ΅λ‹ˆλ‹€. 이 였λ₯˜λŠ” μ—΄ κ΅¬μ„±μ˜ "ν‚€"와 관련이 μ—†μŠ΅λ‹ˆλ‹€.

AntλŠ” λ‹€μŒκ³Ό 같이 각 데이터 행에 "key"λΌλŠ” 고유 ν‚€κ°€ μžˆμ„ κ²ƒμœΌλ‘œ μ˜ˆμƒν•©λ‹ˆλ‹€.

{ key: 1, value: 'foo'}

λ‚΄ λ°μ΄ν„°μ—λŠ” λŒ€μ‹  "id"κ°€ μžˆμŠ΅λ‹ˆλ‹€.

{ id: 1, value: 'foo'}

이 문제λ₯Ό ν•΄κ²°ν•˜κΈ° μœ„ν•΄ λ‹€μŒκ³Ό 같이 λ‚΄ ν…Œμ΄λΈ”μ— rowKey 속성을 μΆ”κ°€ν–ˆμŠ΅λ‹ˆλ‹€.

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

<Table .... rowKey={record => record.countryId} ... /> μˆ˜μ •ν–ˆμŠ΅λ‹ˆλ‹€.
countryId λŠ” λ°μ΄ν„°μ˜ 각 ν•­λͺ© ν•„λ“œμ—μ„œ κ³ μœ ν•œ κ°’μž…λ‹ˆλ‹€.

Ant-design ν…Œμ΄λΈ”μ—μ„œ rowKey props μœ ν˜•μ€ λ¬Έμžμ—΄μž…λ‹ˆλ‹€.
κ·Έλž˜μ„œ uuidλ₯Ό μ‚¬μš©ν•˜μ—¬ λ¬Έμžμ—΄λ‘œ μΆ”κ°€ν–ˆμŠ΅λ‹ˆλ‹€. κ·Έλž˜μ„œ 였λ₯˜λ₯Ό ν•΄κ²°ν–ˆμŠ΅λ‹ˆλ‹€.

μ•ˆλ…•ν•˜μ„Έμš”, Table에 rowKeyλ₯Ό μΆ”κ°€ν•˜λ©΄ λ¬Έμ œκ°€ ν•΄κ²°λ˜μ—ˆμŠ΅λ‹ˆλ‹€.
<Table rowKey="아이디" ...../>

'id'λŠ” λ‹€μŒκ³Ό 같이 ν…Œμ΄λΈ” λ‚΄λΆ€μ˜ μ—΄ 쀑 ν•˜λ‚˜μ˜ ν‚€μž…λ‹ˆλ‹€.
μƒμˆ˜ μ—΄ = [
{
제λͺ©: '#',
dataIndex: data.id,
ν‚€: '아이디',
},
{
제λͺ©: '이름',
데이터 인덱슀: '이름',
ν‚€: '이름',
},
.
.
λ„€, 제 아이디도 κ³ μœ ν•œ λ¬Έμžμ—΄μž…λ‹ˆλ‹€. 이 λ³€κ²½μœΌλ‘œ μ—΄μ˜ IDκ°€ 각 열에 λŒ€ν•΄ 'data-row-key' μ†μ„±μœΌλ‘œ μ„€μ •λ˜κ³  이제 κ²½κ³ κ°€ ν‘œμ‹œλ˜μ§€ μ•ŠλŠ” 것을 λ³Ό 수 μžˆμŠ΅λ‹ˆλ‹€.

μ†”λ£¨μ…˜ 1

각 μ—΄μ—λŠ” κ³ μœ ν•œ 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;


μ†”λ£¨μ…˜ 2

고유 값이 μžˆλŠ” ν…Œμ΄λΈ”μ— rowkey μ„€μ •ν•˜λ©΄ λ©λ‹ˆλ‹€.

// 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;


μ°Έμ‘°

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

image

@xgqfrms , μ†”λ£¨μ…˜ 2μ—μ„œ rowKey μ†Œν’ˆμ„ rowkey="id" 쀄일 수 μžˆμŠ΅λ‹ˆλ‹€. 그것은 λ™μΌν•˜κ²Œ μž‘λ™ν•©λ‹ˆλ‹€.

λ‚΄κ°€λ°›λŠ” 것은이 λ©”μ‹œμ§€μž…λ‹ˆλ‹€

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)

TableCell λ¬Έμ œκ°€ μžˆμŒμ„ λ‚˜νƒ€λ‚΄μ§€λ§Œ key μ†Œν’ˆμ„ μ–΄λ–»κ²Œ μ„€μ •ν•  수 μžˆμŠ΅λ‹ˆκΉŒ?

Antd νŽ˜μ΄μ§€μ˜ μ˜ˆμ œμ—μ„œ 이 였λ₯˜κ°€ λ°œμƒν•˜μ§€ μ•ŠλŠ” κ²ƒμœΌλ‘œ λ‚˜νƒ€λ‚¬μŠ΅λ‹ˆλ‹€.

도움에 κ°μ‚¬λ“œλ¦½λ‹ˆλ‹€.

λ‚΄κ°€λ°›λŠ” 것은이 λ©”μ‹œμ§€μž…λ‹ˆλ‹€

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)

이봐, 방금 μ•Œμ•„ λƒˆμ–΄. columns μ†Œν’ˆμ—λŠ” dataIndex λ˜λŠ” key 이 μžˆμ–΄μ•Ό ν•©λ‹ˆλ‹€.

이 μ„Ήμ…˜μ—μ„œ μ–ΈκΈ‰λ©λ‹ˆλ‹€: https://ant.design/components/table/#Column

@tuanalumi , 지적해 μ£Όμ…”μ„œ κ°μ‚¬ν•©λ‹ˆλ‹€. key μΆ”κ°€ν–ˆλŠ”λ° 더 이상 ν•΄λ‹Ή κ²½κ³ κ°€ ν‘œμ‹œλ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€!

COLUMN 킀와 ROW ν‚€λ₯Ό ν˜Όλ™ν–ˆκΈ° λ•Œλ¬Έμ— 이것은 λ‚˜μ—κ²Œλ„ ν˜Όλž€μŠ€λŸ¬μ› μŠ΅λ‹ˆλ‹€. 이 였λ₯˜λŠ” μ—΄ κ΅¬μ„±μ˜ "ν‚€"와 관련이 μ—†μŠ΅λ‹ˆλ‹€.

AntλŠ” λ‹€μŒκ³Ό 같이 각 데이터 행에 "key"λΌλŠ” 고유 ν‚€κ°€ μžˆμ„ κ²ƒμœΌλ‘œ μ˜ˆμƒν•©λ‹ˆλ‹€.

{ key: 1, value: 'foo'}

λ‚΄ λ°μ΄ν„°μ—λŠ” λŒ€μ‹  "id"κ°€ μžˆμŠ΅λ‹ˆλ‹€.

{ id: 1, value: 'foo'}

이 문제λ₯Ό ν•΄κ²°ν•˜κΈ° μœ„ν•΄ λ‹€μŒκ³Ό 같이 λ‚΄ ν…Œμ΄λΈ”μ— rowKey 속성을 μΆ”κ°€ν–ˆμŠ΅λ‹ˆλ‹€.

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

λ‚˜λ₯Ό μœ„ν•΄ 그것을 κ³ μ³€μŠ΅λ‹ˆλ‹€, κ°μ‚¬ν•©λ‹ˆλ‹€

이 νŽ˜μ΄μ§€κ°€ 도움이 λ˜μ—ˆλ‚˜μš”?
0 / 5 - 0 λ“±κΈ‰