Skip to content

Commit 95a5824

Browse files
authored
fix(blade): fallback for useInsertionEffect (#2450)
* fix(blade): fallback for useInsertionEffect * chore: prevent webpack from analyzing useInsertionEffect * Create fair-beers-confess.md
1 parent 2da77e4 commit 95a5824

File tree

2 files changed

+16
-5
lines changed

2 files changed

+16
-5
lines changed

.changeset/fair-beers-confess.md

+5
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
"@razorpay/blade": patch
3+
---
4+
5+
fix(blade): Add backwards compat for React17 - fallback for useInsertionEffect

packages/blade/src/utils/useCallbackRef.ts

+11-5
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,13 @@
1+
/* eslint-disable @typescript-eslint/no-explicit-any */
12
/* eslint-disable @typescript-eslint/explicit-function-return-type */
2-
import { useCallback, useInsertionEffect, useRef } from 'react';
3+
import React, { useCallback, useRef } from 'react';
4+
import { useIsomorphicLayoutEffect } from './useIsomorphicLayoutEffect';
5+
6+
// Prevent webpack from importing this:
7+
// https://github.com/webpack/webpack/issues/14814#issuecomment-1536757985
8+
// https://github.com/radix-ui/primitives/issues/2796
9+
const useReactInsertionEffect = (React as any)[' useInsertionEffect '.trim().toString()];
10+
const useInsertionEffectFallback = useReactInsertionEffect || useIsomorphicLayoutEffect;
311

412
/**
513
* This hook is user-land implementation of the experimental `useEffectEvent` hook.
@@ -11,11 +19,9 @@ function useCallbackRef<Args extends unknown[], Return>(
1119
callback: ((...args: Args) => Return) | undefined,
1220
deps: React.DependencyList = [],
1321
) {
14-
const callbackRef = useRef<typeof callback>(() => {
15-
throw new Error('Cannot call an event handler while rendering.');
16-
});
22+
const callbackRef = useRef<typeof callback>(callback);
1723

18-
useInsertionEffect(() => {
24+
useInsertionEffectFallback(() => {
1925
callbackRef.current = callback;
2026
});
2127

0 commit comments

Comments
 (0)