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:
// ONLINE-RUNNER:browser;
// Uwaga: Odkomentuj wiersze z importami podczas pracy z kompilatorem JSX.
// import React from 'react';
// import ReactDOM from 'react-dom';
const tableStyle = {
border: '1px solid black',
borderCollapse: 'collapse'
}
const tdStyle = {
border: '1px solid black',
};
const App = () => {
const students = [
{ id: 1, name: 'Tomek', age: 22 },
{ id: 2, name: 'Adam', age: 43 },
{ id: 3, name: 'Marek', age: 16 },
{ id: 4, name: 'Jacek', age: 29 }
];
return (
<div>
<table style={tableStyle}>
<tbody>
<tr>
<th style={tdStyle}>Id</th>
<th style={tdStyle}>Imię</th>
<th style={tdStyle}>Wiek</th>
</tr>
{students.map(({ id, name, age }) => (
<tr key={id}>
<td style={tdStyle}>{id}</td>
<td style={tdStyle}>{name}</td>
<td style={tdStyle}>{age}</td>
</tr>
))}
</tbody>
</table>
</div>
);
};
const root = document.querySelector('#root');
ReactDOM.render(<App />, root );
Przykład dynamicznego komponentu tabeli
W tej sekcji chcielibyśmy pokazać, jak stworzyć komponent, który wyświetla dane zmieniające się po kliknięciu.
// ONLINE-RUNNER:browser;
// Uwaga: Odkomentuj wiersze z importami podczas pracy z kompilatorem JSX.
// import React from 'react';
// import ReactDOM from 'react-dom';
const tableStyle = {
border: '1px solid black',
borderCollapse: 'collapse'
}
const tdStyle = {
border: '1px solid black',
};
const Table = ({students}) => (
<div>
<table style={tableStyle}>
<tbody>
<tr>
<th style={tdStyle}>Id</th>
<th style={tdStyle}>Imię</th>
<th style={tdStyle}>Wiek</th>
</tr>
{students.map(({ id, name, age }) => (
<tr key={id}>
<td style={tdStyle}>{id}</td>
<td style={tdStyle}>{name}</td>
<td style={tdStyle}>{age}</td>
</tr>
))}
</tbody>
</table>
</div>
);
const GROUP_1 = [
{ id: 1, name: 'Tomek', age: 22 },
{ id: 2, name: 'Adam', age: 43 },
{ id: 3, name: 'Marek', age: 16 },
{ id: 4, name: 'Jacek', age: 29 }
];
const GROUP_2 = [
{ id: 1, name: 'Kasia', age: 23 },
{ id: 2, name: 'Ania', age: 18 }
];
const App = () => {
const [students, setStudents] = React.useState(GROUP_1);
return (
<div>
<div>
<button onClick={() => setStudents(GROUP_1)}>Pokaż GRUPE_1</button>
<button onClick={() => setStudents(GROUP_2)}>Pokaż GRUPE_2</button>
</div>
<br />
<Table students={students} />
</div >
);
};
const root = document.querySelector('#root');
ReactDOM.render(<App />, root );