Skip to content

Commit 1f304b6

Browse files
committed
fix: react forwardRef generics issue
1 parent d857395 commit 1f304b6

File tree

1 file changed

+11
-4
lines changed

1 file changed

+11
-4
lines changed

src/VirtualList.tsx

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,17 @@
11
import React, {
22
useState,
33
useMemo,
4-
useEffect, useRef, ReactNode, useLayoutEffect, useImperativeHandle, forwardRef,
4+
useEffect, useRef, ReactNode, useLayoutEffect, useImperativeHandle, forwardRef as forwardRef0,
55
} from 'react';
66

77
type OptionalKeys<T> = {
88
[K in keyof T]?: T[K];
99
};
10+
// fix forwardRef type for generic types. refer: https://stackoverflow.com/questions/58469229/react-with-typescript-generics-while-using-react-forwardref
11+
type FixedForwardRef = < T, P = {} > (
12+
render: (props: P, ref: React.Ref<T>) => React.ReactElement | null,
13+
) => (props: P & React.RefAttributes<T>) => React.ReactElement | null;
14+
const forwardRef = forwardRef0 as FixedForwardRef
1015

1116
export type Props<ITEM> = {
1217
itemSize?: number,
@@ -26,7 +31,7 @@ export interface VirtualListHandle {
2631
scrollToIndex(index: number): void
2732
}
2833

29-
export const VirtualList = forwardRef(function <ITEM>(
34+
const VirtualList0 = function <ITEM>(
3035
props: Props<ITEM>,
3136
ref: React.ForwardedRef<VirtualListHandle>
3237
) {
@@ -108,6 +113,8 @@ export const VirtualList = forwardRef(function <ITEM>(
108113
{visible.map((item, i) => props.renderItem(item, visibleIndexes[i]))}
109114
</div>
110115
</div>
111-
})
116+
}
117+
118+
VirtualList0.defaultProps = defaultProps
112119

113-
VirtualList.defaultProps = defaultProps
120+
export const VirtualList = forwardRef(VirtualList0)

0 commit comments

Comments
 (0)