improved table memoization and performance

This commit is contained in:
Annika Hannig 2022-08-02 10:51:01 +02:00
parent e21d9b238e
commit c484ff2a0b
2 changed files with 38 additions and 22 deletions

View File

@ -267,15 +267,16 @@ const NeighborColumn = ({neighbor, column}) => {
}
const NeighborRow = ({neighbor, columns}) => {
const cols = useMemo(() => columns.map((c) =>
<NeighborColumn
key={c}
neighbor={neighbor}
column={c} />
), [neighbor, columns]);
return (
<tr>{cols}</tr>
);
return useMemo(() => {
const cols = columns.map((c) =>
<NeighborColumn
key={c}
neighbor={neighbor}
column={c} />);
return (
<tr>{cols}</tr>
);
}, [neighbor, columns]);
}
/**

View File

@ -1,5 +1,7 @@
import { useCallback }
import { useCallback
, useMemo
}
from 'react';
@ -91,18 +93,35 @@ const RouteColumn = ({onClick, column, route}) => {
"ASPath": ColAsPath,
};
const handleClick = useCallback(() => onClick(route), [route, onClick]);
let Widget = widgets[column] || ColDefault;
return (
<Widget
column={column}
route={route}
onClick={handleClick} />
onClick={onClick} />
);
};
/**
* RoutesRow renders a memoized row
*/
const RoutesRow = ({columns, route, onClick}) => {
return useMemo(() => {
const callback = () => onClick(route);
const cols = columns.map((col) => (
<RouteColumn
key={col}
onClick={callback}
column={col}
route={route} />
));
return (
<tr>{cols}</tr>
);
}, [columns, route, onClick]);
}
const RoutesTable = ({results}) => {
const setRouteDetails = useSetRouteDetails();
@ -119,15 +138,11 @@ const RoutesTable = ({results}) => {
}
const rows = routes.map((r, i) => (
<tr key={i}>
{columnsOrder.map((col) => (
<RouteColumn
key={col}
onClick={showAttributesModal}
column={col}
route={r} />
))}
</tr>
<RoutesRow
key={i}
columns={columnsOrder}
onClick={showAttributesModal}
route={r} />
));
return (