PL
React - Jak stworzyć własną dynamiczną tabelę z dynamicznym nagłówkiem
0 points
W tym artykule chcielibyśmy pokazać, jak stworzyć dynamiczną tabelę w React.
W poniższym przykładzie użyłem następującej koncepcji:
- tabela jest opisana kolumnami i właściwościami danych,
- tabela składa się z nagłówka i kilku rekordów danych,
- tablica
columns
pozwala nam zdecydować, które nazwy kolumn chcemy wyświetlić w wierszach danych, - wykorzystując funkcję
map()
zmniejszamy ilość kodu - kolumny i tablice danych są mapowane na komponenty Reacta.
Uwaga:
Pamiętaj, że każdy element powinien posiadać unikalny klucz - pomaga to Reactowi optymalnie zarządzać zmianami w drzewie DOM. Takim kluczem może być na przykład identyfikator
path
przypisany do każdego z elementów tablicy.
Uruchamialny przykład:
xxxxxxxxxx
1
// Uwaga: Odkomentuj wiersze z importami podczas pracy z kompilatorem JSX.
2
// import React from 'react';
3
// import ReactDOM from 'react-dom';
4
5
const tableStyle = {
6
border: "1px solid black",
7
borderCollapse: "collapse",
8
};
9
10
const tdStyle = {
11
border: "1px solid black",
12
};
13
14
const Table = ({ id, columns, data }) => (
15
<table style={tableStyle}>
16
<tbody>
17
<tr>
18
{columns.map(({ path, name }) => (
19
<th style={tdStyle} key={path}>{name}</th>
20
))}
21
</tr>
22
{data.map((rowData) => (
23
<tr key={rowData[id]}>
24
{columns.map(({ path }) => (
25
<td style={tdStyle} key={path}>
26
{rowData[path]}
27
</td>
28
))}
29
</tr>
30
))}
31
</tbody>
32
</table>
33
);
34
35
// Przykład użycia --------------------
36
37
const App = () => {
38
const columns = [
39
{ path: "id", name: "ID" },
40
{ path: "name", name: "Imię" },
41
{ path: "age", name: "Wiek" },
42
];
43
44
const data = [
45
{ id: 1, name: 'Kasia', age: 25, favFruit: '🍏' },
46
{ id: 2, name: 'Tomek', age: 23, favFruit: '🍌' },
47
{ id: 3, name: 'Anna', age: 26, favFruit: '🍊' },
48
{ id: 4, name: 'Jacek', age: 21, favFruit: '🍒' }
49
];
50
51
return (
52
<div>
53
<Table id="id" columns={columns} data={data} />
54
</div>
55
);
56
};
57
58
const root = document.querySelector('#root');
59
ReactDOM.render(<App />, root );