memoize components

This commit is contained in:
AykutSarac 2022-04-06 21:55:50 +03:00
parent 08c9553119
commit 4fc1e53d6c
2 changed files with 20 additions and 11 deletions

View File

@ -123,7 +123,7 @@ function getLayoutIcon(layout: CanvasDirection) {
} }
const Sidebar: React.FC<{ const Sidebar: React.FC<{
setJson: React.Dispatch<React.SetStateAction<string>>; setJson: (json: string) => void;
}> = ({ setJson }) => { }> = ({ setJson }) => {
const [jsonFile, setJsonFile] = React.useState<File | null>(null); const [jsonFile, setJsonFile] = React.useState<File | null>(null);
const [config, setConfig] = useLocalStorage<StorageConfig>( const [config, setConfig] = useLocalStorage<StorageConfig>(
@ -269,4 +269,4 @@ const Sidebar: React.FC<{
); );
}; };
export default Sidebar; export default React.memo(Sidebar);

View File

@ -48,14 +48,25 @@ const StyledControls = styled.div`
export const LiveEditor: React.FC<{ export const LiveEditor: React.FC<{
json: string; json: string;
setJson: React.Dispatch<React.SetStateAction<string>>; setJson: (json: string) => void;
}> = ({ json }) => { }> = React.memo(({ json }) => {
const pageLoaded = useLoading(); const pageLoaded = useLoading();
const canvasRef = React.useRef<CanvasRef | null>(null); const canvasRef = React.useRef<CanvasRef | null>(null);
const wrapperRef = React.useRef<ReactZoomPanPinchRef | null>(null); const wrapperRef = React.useRef<ReactZoomPanPinchRef | null>(null);
const [config] = useLocalStorage<StorageConfig>("config", defaultConfig); const [config] = useLocalStorage<StorageConfig>("config", defaultConfig);
const [data, setData] = React.useState({
nodes: [],
edges: [],
});
const { nodes, edges } = getEdgeNodes(json, config.expand); React.useEffect(() => {
const { nodes, edges } = getEdgeNodes(json, config.expand);
setData({
nodes,
edges,
});
}, [json, config.expand]);
React.useEffect(() => { React.useEffect(() => {
if (wrapperRef.current) wrapperRef.current?.resetTransform(); if (wrapperRef.current) wrapperRef.current?.resetTransform();
@ -109,16 +120,14 @@ export const LiveEditor: React.FC<{
<TransformComponent> <TransformComponent>
<Canvas <Canvas
ref={canvasRef} ref={canvasRef}
nodes={nodes} nodes={data.nodes}
node={CustomNode} node={CustomNode}
edges={edges} edges={data.edges}
maxWidth={20000} maxWidth={20000}
maxHeight={20000} maxHeight={20000}
center={false} center={false}
zoomable={false} zoomable={false}
layoutOptions={{ direction={config.layout}
"elk.direction": config.layout,
}}
fit fit
readonly readonly
animated animated
@ -146,4 +155,4 @@ export const LiveEditor: React.FC<{
); );
return null; return null;
}; });