diff --git a/.changeset/cool-spies-change.md b/.changeset/cool-spies-change.md new file mode 100644 index 00000000..006350d9 --- /dev/null +++ b/.changeset/cool-spies-change.md @@ -0,0 +1,5 @@ +--- +'react-simplikit': patch +--- + +fix(usePrevious): opt out `usePrevious` hook from React Compiler diff --git a/packages/core/src/hooks/usePrevious/usePrevious.ts b/packages/core/src/hooks/usePrevious/usePrevious.ts index 10e7cd52..627d8ca9 100644 --- a/packages/core/src/hooks/usePrevious/usePrevious.ts +++ b/packages/core/src/hooks/usePrevious/usePrevious.ts @@ -21,6 +21,10 @@ const strictEquals = (prev: T, next: T) => prev === next; * const previousCount = usePrevious(count); */ export function usePrevious(state: T, compare: (prev: T, next: T) => boolean = strictEquals): T { + // Without `'use no memo'`, React Compiler throws when `panicThreshold` is not `'none'` + // because this hook intentionally reads and updates refs during render. + 'use no memo'; + const prevRef = useRef(state); const currentRef = useRef(state); const isFirstRender = useRef(true);