Skip to content

Commit 71d6cc3

Browse files
authored
Create new hook for combining refs (#1683)
1 parent ad2d8a0 commit 71d6cc3

File tree

4 files changed

+29
-0
lines changed

4 files changed

+29
-0
lines changed

generatedTypes/src/hooks/index.d.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
export { default as useCombinedRefs } from './useCombinedRefs';
12
export { default as useToggleValue } from './useToggleValue';
23
export { default as useDidUpdate } from './useDidUpdate';
34
export { default as useOrientation } from './useOrientation';
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
import React from 'react';
2+
declare const useCombinedRefs: (...refs: React.Ref<any>[]) => React.MutableRefObject<undefined>;
3+
export default useCombinedRefs;

src/hooks/index.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
export {default as useCombinedRefs} from './useCombinedRefs';
12
export {default as useToggleValue} from './useToggleValue';
23
export {default as useDidUpdate} from './useDidUpdate';
34
export {default as useOrientation} from './useOrientation';

src/hooks/useCombinedRefs/index.ts

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
import React from 'react';
2+
3+
const useCombinedRefs = (...refs: React.Ref<any>[]) => {
4+
const targetRef = React.useRef();
5+
6+
React.useEffect(() => {
7+
refs.forEach(ref => {
8+
if (!ref) {
9+
return;
10+
}
11+
12+
if (typeof ref === 'function') {
13+
ref(targetRef.current);
14+
} else {
15+
// @ts-expect-error
16+
ref.current = targetRef.current;
17+
}
18+
});
19+
}, [refs]);
20+
21+
return targetRef;
22+
};
23+
24+
export default useCombinedRefs;

0 commit comments

Comments
 (0)