Skip to content

Commit 02bf1c8

Browse files
committed
reverting to using memo, but only memoizing on the hash
1 parent 5eed5fe commit 02bf1c8

File tree

1 file changed

+21
-54
lines changed

1 file changed

+21
-54
lines changed

dash/dash-renderer/src/wrapper/DashWrapper.tsx

Lines changed: 21 additions & 54 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import React, {useMemo, useCallback, memo, useState, useEffect} from 'react';
1+
import React, {useCallback, memo, useMemo} from 'react';
22
import {
33
path,
44
concat,
@@ -43,19 +43,13 @@ type DashWrapperProps = {
4343
_dashprivate_error?: any;
4444
};
4545

46-
// Define the type for your state
47-
type HydratedState = React.DetailedReactHTMLElement<
48-
React.InputHTMLAttributes<HTMLInputElement>,
49-
HTMLInputElement
50-
> | null;
5146

5247
function DashWrapper({
5348
componentPath,
5449
_dashprivate_error,
5550
...extras
5651
}: DashWrapperProps) {
5752
const dispatch = useDispatch();
58-
const [hydrated, setHydrated] = useState<HydratedState>(null);
5953

6054
// Get the config for the component as props
6155
const config: DashConfig = useSelector(selectConfig);
@@ -66,22 +60,6 @@ function DashWrapper({
6660
selectDashPropsEqualityFn
6761
);
6862

69-
const dependenciesStable = useMemo(() => {
70-
return JSON.stringify(
71-
{
72-
h,
73-
componentPath,
74-
componentProps
75-
}
76-
)
77-
}, [
78-
JSON.stringify({
79-
componentProps,
80-
componentPath,
81-
h
82-
})
83-
])
84-
8563
const setProps = (newProps: UpdatePropsPayload) => {
8664
const {id} = componentProps;
8765
const {_dash_error, ...restProps} = newProps;
@@ -393,44 +371,33 @@ function DashWrapper({
393371
return props;
394372
};
395373

396-
useEffect(() => {
397-
let comp;
374+
const hydrated = useMemo(() => {
398375
if (!component) {
399-
return
376+
return;
400377
}
378+
401379
const element = Registry.resolve(component);
402-
const hydratedProps = setHydratedProps()
380+
const hydratedProps = setHydratedProps();
381+
403382
let hydratedChildren: any;
404383
if (componentProps.children !== undefined) {
405-
hydratedChildren = wrapChildrenProp(componentProps.children, [
406-
'children'
407-
]);
408-
}
409-
if (config.props_check) {
410-
comp = (
411-
<CheckedComponent
412-
element={element}
413-
props={hydratedProps}
414-
component={component}
415-
>
416-
{createElement(
417-
element,
418-
hydratedProps,
419-
extraProps,
420-
hydratedChildren
421-
)}
422-
</CheckedComponent>
423-
);
384+
hydratedChildren = wrapChildrenProp(componentProps.children, ['children']);
424385
}
425386

426-
comp = createElement(
427-
element,
428-
hydratedProps,
429-
extraProps,
430-
hydratedChildren
387+
const rendered = config.props_check ? (
388+
<CheckedComponent
389+
element={element}
390+
props={hydratedProps}
391+
component={component}
392+
>
393+
{createElement(element, hydratedProps, extraProps, hydratedChildren)}
394+
</CheckedComponent>
395+
) : (
396+
createElement(element, hydratedProps, extraProps, hydratedChildren)
431397
);
432-
setHydrated(comp)
433-
}, [dependenciesStable]);
398+
399+
return rendered
400+
}, [h]);
434401

435402
if (!component) {
436403
return null
@@ -448,7 +415,7 @@ function DashWrapper({
448415
dispatch={dispatch}
449416
>
450417
<DashContextProvider componentPath={componentPath}>
451-
{hydrated ? hydrated : <></>}
418+
{hydrated ? hydrated : <div/>}
452419
</DashContextProvider>
453420
</ComponentErrorBoundary>
454421
);

0 commit comments

Comments
 (0)