PL
React - jak stworzyć dynamiczną tabelę
3 points
W tym artykule chcielibyśmy pokazać wam, jak stworzyć dynamiczną tabelę w React.
Poniższy przykład składa się z kilku kroków:
- Stworzenie dynamicznej tabeli na podstawie tablicy,
- Każda tabela składa się z nagłówka i rekordów danych,
- Nagłówek jest zwykle stały i zachowuje tę samą liczbę kolumn,
- Tworząc rekordy danych korzystamy z funkcji
map()
. Jest to dobre podejście aby przekonwertować elementy tablicy na elementy React.
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
id
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 App = () => {
15
const students = [
16
{ id: 1, name: 'Tomek', age: 22 },
17
{ id: 2, name: 'Adam', age: 43 },
18
{ id: 3, name: 'Marek', age: 16 },
19
{ id: 4, name: 'Jacek', age: 29 }
20
];
21
return (
22
<div>
23
<table style={tableStyle}>
24
<tbody>
25
<tr>
26
<th style={tdStyle}>Id</th>
27
<th style={tdStyle}>Imię</th>
28
<th style={tdStyle}>Wiek</th>
29
</tr>
30
{students.map(({ id, name, age }) => (
31
<tr key={id}>
32
<td style={tdStyle}>{id}</td>
33
<td style={tdStyle}>{name}</td>
34
<td style={tdStyle}>{age}</td>
35
</tr>
36
))}
37
</tbody>
38
</table>
39
</div>
40
);
41
};
42
43
const root = document.querySelector('#root');
44
ReactDOM.render(<App />, root );
W tej sekcji chcielibyśmy pokazać, jak stworzyć komponent, który wyświetla dane zmieniające się po kliknięciu.
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 = ({students}) => (
15
<div>
16
<table style={tableStyle}>
17
<tbody>
18
<tr>
19
<th style={tdStyle}>Id</th>
20
<th style={tdStyle}>Imię</th>
21
<th style={tdStyle}>Wiek</th>
22
</tr>
23
{students.map(({ id, name, age }) => (
24
<tr key={id}>
25
<td style={tdStyle}>{id}</td>
26
<td style={tdStyle}>{name}</td>
27
<td style={tdStyle}>{age}</td>
28
</tr>
29
))}
30
</tbody>
31
</table>
32
</div>
33
);
34
35
const GROUP_1 = [
36
{ id: 1, name: 'Tomek', age: 22 },
37
{ id: 2, name: 'Adam', age: 43 },
38
{ id: 3, name: 'Marek', age: 16 },
39
{ id: 4, name: 'Jacek', age: 29 }
40
];
41
42
const GROUP_2 = [
43
{ id: 1, name: 'Kasia', age: 23 },
44
{ id: 2, name: 'Ania', age: 18 }
45
];
46
47
const App = () => {
48
const [students, setStudents] = React.useState(GROUP_1);
49
return (
50
<div>
51
<div>
52
<button onClick={() => setStudents(GROUP_1)}>Pokaż GRUPE_1</button>
53
<button onClick={() => setStudents(GROUP_2)}>Pokaż GRUPE_2</button>
54
</div>
55
<br />
56
<Table students={students} />
57
</div >
58
);
59
};
60
61
const root = document.querySelector('#root');
62
ReactDOM.render(<App />, root );