How to create customized dynamic table in React (with dynamic header)
Dirask-React
Posted on March 3, 2021
Hello again! ππ
In the comment section under my previous post there was quite a discussion about creating a more dynamic solution for dynamic tables in React, so here we are! π
Before we start, I would highly recommend you to check out runnable examples for the solution on our website:
How to create customized dynamic table in React (with dynamic header)
The final effect of this post:
In below example I usedΒ the following concept:
- table is described by columns and data properties,
- table is composed of header and some data records,
- the
column
array allows us to decide which column names we want to display in the data rows,Β - usingΒ
map()
Β function we are able to reduce the amount of code β columns and data arrays are mapped into React components.
Remember that each record should have a unique key ποΈ - it helps React optimally manage changes in the DOM. Such a key may be, for example, the path
assigned to each element of the table.
Practical example:
import React from 'react';
const tableStyle = {
border: '1px solid black',
borderCollapse: 'collapse',
textAlign: 'center',
width: '100%'
}
const tdStyle = {
border: '1px solid #85C1E9',
background: 'white',
padding: '5px'
};
const thStyle = {
border: '1px solid #3498DB',
background: '#3498DB',
color: 'white',
padding: '5px'
};
const Table = ({ id, columns, data }) => (
<table style={tableStyle}>
<tbody>
<tr>
{columns.map(({ path, name }) => (
<th style={thStyle} key={path}>{name}</th>
))}
</tr>
{data.map((rowData) => (
<tr key={rowData[id]}>
{columns.map(({ path }) => (
<td style={tdStyle} key={path}>
{rowData[path]}
</td>
))}
</tr>
))}
</tbody>
</table>
);
// Example use --------------------
const App = () => {
const columns = [
{ path: "id", name: "ID" },
{ path: "name", name: "Name" },
{ path: "age", name: "Age" },
{ path: "favFruit", name: "Favourite Fruit" },
];
const data = [
{ id: 1, name: 'Kate', age: 25, favFruit: 'π' },
{ id: 2, name: 'Tom', age: 23, favFruit: 'π' },
{ id: 3, name: 'Ann', age: 26, favFruit: 'π' },
{ id: 4, name: 'Jack', age: 21, favFruit: 'π' }
];
return (
<div>
<Table id="id" columns={columns} data={data} />
</div>
);
};
export default App;
You can run this example here
If you found this solution useful you can react to this post or just leave a comment to let me know what you think. π¬
Thanks for your time! π
Write to us! β
If you have any problem to solve or questions that no one can answer related to a React or JavaScript topic, or you're looking for mentoring write to us on dirask.com -> Questions
Posted on March 3, 2021
Join Our Newsletter. No Spam, Only the good stuff.
Sign up to receive the latest update from our blog.