From a85163f07a874829f1eba796d7fb3bd016d20882 Mon Sep 17 00:00:00 2001 From: yoyo837 Date: Mon, 29 Sep 2025 18:04:05 +0800 Subject: [PATCH 1/3] chore: revert ts type changes and use smaller way. --- src/Immutable.tsx | 33 +++++++++++++-------------------- 1 file changed, 13 insertions(+), 20 deletions(-) diff --git a/src/Immutable.tsx b/src/Immutable.tsx index b8127d4..03b3e45 100644 --- a/src/Immutable.tsx +++ b/src/Immutable.tsx @@ -6,8 +6,6 @@ export type CompareProps> = ( nextProps: Readonly>, ) => boolean; -type ImmutableProps> = Omit, 'ref'>; - /** * Create Immutable pair for `makeImmutable` and `responseImmutable`. */ @@ -34,10 +32,10 @@ export default function createImmutable() { function makeImmutable>( Component: T, shouldTriggerRender?: CompareProps, - ): React.ComponentType> { + ): T { const refAble = supportRef(Component); - const ImmutableComponent = (props: ImmutableProps, ref: React.Ref) => { + const ImmutableComponent = function (props: any, ref: any) { const refProps = refAble ? { ref } : {}; const renderTimesRef = React.useRef(0); const prevProps = React.useRef(props); @@ -45,13 +43,13 @@ export default function createImmutable() { // If parent has the context, we do not wrap it const mark = useImmutableMark(); if (mark !== null) { - return ; + return ; } if ( - // Always trigger re-render if `shouldTriggerRender` is not provided + // Always trigger re-render if not provide `notTriggerRender` !shouldTriggerRender || - shouldTriggerRender(prevProps.current as any, props as any) + shouldTriggerRender(prevProps.current, props) ) { renderTimesRef.current += 1; } @@ -60,7 +58,7 @@ export default function createImmutable() { return ( - + ); }; @@ -69,9 +67,7 @@ export default function createImmutable() { ImmutableComponent.displayName = `ImmutableRoot(${Component.displayName || Component.name})`; } - return refAble - ? (React.forwardRef(ImmutableComponent) as React.ComponentType>) - : (ImmutableComponent as unknown as React.ComponentType>); + return refAble ? React.forwardRef(ImmutableComponent) as unknown as T : (ImmutableComponent as T); } /** @@ -81,13 +77,14 @@ export default function createImmutable() { function responseImmutable>( Component: T, propsAreEqual?: CompareProps, - ): React.ComponentType> { + ): T { const refAble = supportRef(Component); - const ImmutableComponent = (props: ImmutableProps, ref: React.Ref) => { + const ImmutableComponent = function (props: any, ref: any) { const refProps = refAble ? { ref } : {}; useImmutableMark(); - return ; + + return ; }; if (process.env.NODE_ENV !== 'production') { @@ -97,12 +94,8 @@ export default function createImmutable() { } return refAble - ? (React.memo(React.forwardRef(ImmutableComponent), propsAreEqual) as React.ComponentType< - React.ComponentProps - >) - : (React.memo(ImmutableComponent, propsAreEqual) as unknown as React.ComponentType< - React.ComponentProps - >); + ? React.memo(React.forwardRef(ImmutableComponent), propsAreEqual) as unknown as T + : (React.memo(ImmutableComponent, propsAreEqual) as unknown as T); } return { From 85fb58aa07076e325de470e74fc457f87ab2a9a1 Mon Sep 17 00:00:00 2001 From: lijianan <574980606@qq.com> Date: Tue, 30 Sep 2025 00:31:59 +0800 Subject: [PATCH 2/3] update --- src/Immutable.tsx | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/src/Immutable.tsx b/src/Immutable.tsx index 03b3e45..9b14974 100644 --- a/src/Immutable.tsx +++ b/src/Immutable.tsx @@ -35,7 +35,7 @@ export default function createImmutable() { ): T { const refAble = supportRef(Component); - const ImmutableComponent = function (props: any, ref: any) { + const ImmutableComponent: React.ForwardRefRenderFunction = (props, ref) => { const refProps = refAble ? { ref } : {}; const renderTimesRef = React.useRef(0); const prevProps = React.useRef(props); @@ -67,7 +67,9 @@ export default function createImmutable() { ImmutableComponent.displayName = `ImmutableRoot(${Component.displayName || Component.name})`; } - return refAble ? React.forwardRef(ImmutableComponent) as unknown as T : (ImmutableComponent as T); + return refAble + ? (React.forwardRef(ImmutableComponent) as unknown as T) + : (ImmutableComponent as T); } /** @@ -80,10 +82,9 @@ export default function createImmutable() { ): T { const refAble = supportRef(Component); - const ImmutableComponent = function (props: any, ref: any) { + const ImmutableComponent: React.ForwardRefRenderFunction = (props, ref) => { const refProps = refAble ? { ref } : {}; useImmutableMark(); - return ; }; @@ -93,9 +94,10 @@ export default function createImmutable() { })`; } - return refAble - ? React.memo(React.forwardRef(ImmutableComponent), propsAreEqual) as unknown as T - : (React.memo(ImmutableComponent, propsAreEqual) as unknown as T); + return React.memo( + refAble ? React.forwardRef(ImmutableComponent) : ImmutableComponent, + propsAreEqual, + ) as unknown as T; } return { From fd65fbec9b8d3eb29a97f79dbec23b71d649d017 Mon Sep 17 00:00:00 2001 From: lijianan <574980606@qq.com> Date: Tue, 30 Sep 2025 00:32:20 +0800 Subject: [PATCH 3/3] Apply suggestion from @gemini-code-assist[bot] Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com> --- src/Immutable.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Immutable.tsx b/src/Immutable.tsx index 9b14974..67a3b2d 100644 --- a/src/Immutable.tsx +++ b/src/Immutable.tsx @@ -47,7 +47,7 @@ export default function createImmutable() { } if ( - // Always trigger re-render if not provide `notTriggerRender` + // Always trigger re-render if `shouldTriggerRender` is not provided !shouldTriggerRender || shouldTriggerRender(prevProps.current, props) ) {