@@ -87,19 +87,26 @@ export interface Memoized<P> {
|
|||||||
readonly propsAreEqual?: Equivalence.Equivalence<P>
|
readonly propsAreEqual?: Equivalence.Equivalence<P>
|
||||||
}
|
}
|
||||||
|
|
||||||
export const memo: {
|
export const memo = <T extends Component<any, any, any>>(
|
||||||
|
self: ExcludeKeys<T, keyof Memoized<Component.Props<T>>>
|
||||||
|
): T & Memoized<Component.Props<T>> => Object.setPrototypeOf(
|
||||||
|
{ ...self, memo: true },
|
||||||
|
Object.getPrototypeOf(self),
|
||||||
|
)
|
||||||
|
|
||||||
|
export const memoWithEquivalence: {
|
||||||
<T extends Component<any, any, any>>(
|
<T extends Component<any, any, any>>(
|
||||||
propsAreEqual?: Equivalence.Equivalence<Component.Props<T>>
|
propsAreEqual: Equivalence.Equivalence<Component.Props<T>>
|
||||||
): (
|
): (
|
||||||
self: ExcludeKeys<T, keyof Memoized<Component.Props<T>>>
|
self: ExcludeKeys<T, keyof Memoized<Component.Props<T>>>
|
||||||
) => T & Memoized<Component.Props<T>>
|
) => T & Memoized<Component.Props<T>>
|
||||||
<T extends Component<any, any, any>>(
|
<T extends Component<any, any, any>>(
|
||||||
self: ExcludeKeys<T, keyof Memoized<Component.Props<T>>>,
|
self: ExcludeKeys<T, keyof Memoized<Component.Props<T>>>,
|
||||||
propsAreEqual?: Equivalence.Equivalence<Component.Props<T>>,
|
propsAreEqual: Equivalence.Equivalence<Component.Props<T>>,
|
||||||
): T & Memoized<Component.Props<T>>
|
): T & Memoized<Component.Props<T>>
|
||||||
} = Function.dual(2, <T extends Component<any, any, any>>(
|
} = Function.dual(2, <T extends Component<any, any, any>>(
|
||||||
self: ExcludeKeys<T, keyof Memoized<Component.Props<T>>>,
|
self: ExcludeKeys<T, keyof Memoized<Component.Props<T>>>,
|
||||||
propsAreEqual?: Equivalence.Equivalence<Component.Props<T>>,
|
propsAreEqual: Equivalence.Equivalence<Component.Props<T>>,
|
||||||
): T & Memoized<Component.Props<T>> => Object.setPrototypeOf(
|
): T & Memoized<Component.Props<T>> => Object.setPrototypeOf(
|
||||||
{ ...self, memo: true, propsAreEqual },
|
{ ...self, memo: true, propsAreEqual },
|
||||||
Object.getPrototypeOf(self),
|
Object.getPrototypeOf(self),
|
||||||
|
|||||||
@@ -33,8 +33,7 @@ const SubComponent = Component.make(function* SubComponent() {
|
|||||||
return <Text>{id}</Text>
|
return <Text>{id}</Text>
|
||||||
})
|
})
|
||||||
|
|
||||||
const MemoizedSubComponent = Component.memo()(SubComponent)
|
const MemoizedSubComponent = Component.memo(SubComponent)
|
||||||
console.log(MemoizedSubComponent.memo)
|
|
||||||
|
|
||||||
export const Route = createFileRoute("/dev/memo")({
|
export const Route = createFileRoute("/dev/memo")({
|
||||||
component: RouteComponent,
|
component: RouteComponent,
|
||||||
|
|||||||
Reference in New Issue
Block a user