I am attempting to create a react-table component using data that is pulled from a database. From the documentation I have read (https://react-table.tanstack.com/docs/quick-start), it seems like the react-table library uses a useMemo hook to create the data which will be displayed on the table. However, I am having trouble actually adding data to the useMemo hook, since I am not familiar with it.
I have a simple JS object that holds the counts of instances of each category of outages that occur in our database. Once I have the counts, I attempt to pass it to my instance of useMemo, however properties of undefined 'streamCount' is returned. I think I am passing the object to useMemo incorrectly. Any help is appreciated.
function Leaderboard(props){
const data = props.tableData;
console.log(data); //this is the data that is pulled from our DB and is passed as a prop into the component
let counts = {
streamCount: 0,
powerCount: 0,
internetCount: 0,
gamingPlatformCount: 0,
cableCount: 0,
websiteCount: 0,
} //the object that holds the number of instances each category occurs in our data
for(var i = 0; i < data.length; i++){ //checks the data and updates the counts for each category
switch(data[i].service_type) {
case "Streaming":
counts.streamCount += 1;
break;
case "Power":
counts.powerCount+= 1;
break;
case "Internet":
counts.internetCount+= 1;
break;
case "Gaming Platform":
counts.gamingPlatformCount += 1;
break;
case "Cable":
counts.cableCount += 1;
break;
case "Website":
counts.websiteCount += 1;
break;
default:
break;
}
}
console.log(counts) //This returns the correct values of each count when line 41-69 is commented, but returns 0 for all values when those lines are uncommented.
let outageCounts = React.useMemo(
(counts) => [
{
type: 'Streaming',
count: counts.streamCount,
},
{
type: 'Power',
count: counts.powerCount,
},
{
type: 'Internet',
count: counts.internetCount,
},
{
type: 'GamingPlatform',
count: counts.gamingPlatformCount,
},
{
type: 'Cable',
count: counts.cableCount,
},
{
type: 'Website',
count: counts.websiteCount,
},
],
[]
);
//this will be updated to have the accessor be 'count' from outageCounts instead of 'service_type' from data when the bug is resolved. For now it is just using data to test to see if the table would render at all.
const columns = React.useMemo(
() => [
{
Header: 'Service Type',
accessor: 'service_type',
},
],
[]
);
const {
getTableProps,
getTableBodyProps,
headerGroups,
rows,
prepareRow,
} = useTable({ columns, data}) //data will eventually be changed to outageCounts
return (
<table {...getTableProps()} style={{ border: 'solid 1px blue' }}>
<thead>
{headerGroups.map(headerGroup => (
<tr {...headerGroup.getHeaderGroupProps()}>
{headerGroup.headers.map(column => (
<th
{...column.getHeaderProps()}
style={{
borderBottom: 'solid 3px red',
background: 'aliceblue',
color: 'black',
fontWeight: 'bold',
}}
>
{column.render('Header')}
</th>
))}
</tr>
))}
</thead>
<tbody {...getTableBodyProps()}>
{rows.map(row => {
prepareRow(row)
return (
<tr {...row.getRowProps()}>
{row.cells.map(cell => {
return (
<td
{...cell.getCellProps()}
style={{
padding: '10px',
border: 'solid 1px gray',
background: 'papayawhip',
}}
>
{cell.render('Cell')}
</td>
)
})}
</tr>
)
})}
</tbody>
</table>
);
}
export default Leaderboard;