Skip to content

False-positive rules of hooks violation in RSC client component #684

@alexdo

Description

@alexdo

Related plugins

Describe the bug

Hi again! Some libraries trigger TypeError: Cannot read properties of null (reading 'useRef') for me when used inside client components, f.e. keen-slider, which is working fine with Parcel.

Upon requesting the page I get the error listed below under logs.

Reproduction

https://github.com/alexdo/rsc-nested-imports-reproducer/tree/main

Steps to reproduce

I tried to make a minimal reproducer in both parcel and vite. The vite reproducer is based on the starter example out of plugin-rsc/examples.

In both scenarios, there's a Server Component embedding

  1. a Client Component using react-intersection-observer and
  2. another Client Component using keen-slider

With vite-rsc, the Client Component using a hook out of react-intersection-observer is working fine but the Client Component using a hook from keen-slider is throwing the error written above. In parcel, both are working fine.

System Info

System:
    OS: macOS 15.5
    CPU: (10) arm64 Apple M1 Max
    Memory: 373.03 MB / 32.00 GB
    Shell: 5.9 - /bin/zsh
  Binaries:
    Node: 22.13.1 - ~/.nvm/versions/node/v22.13.1/bin/node
    npm: 11.1.0 - ~/.nvm/versions/node/v22.13.1/bin/npm
  Browsers:
    Chrome: 138.0.7204.169
    Safari: 18.5
    Safari Technology Preview: 26.0
  npmPackages:
    @vitejs/plugin-react: latest => 4.7.0
    @vitejs/plugin-rsc: latest => 0.4.17
    vite: ^7.0.6 => 7.0.6

Used Package Manager

npm

Logs

Invalid hook call. Hooks can only be called inside of the body of a function component. This could happen for one of the following reasons:
1. You might have mismatching versions of React and the renderer (such as React DOM)
2. You might be breaking the Rules of Hooks
3. You might have more than one copy of React in the same app
See https://react.dev/link/invalid-hook-call for tips about how to debug and fix this problem.
TypeError: Cannot read properties of null (reading 'useRef')
    at process.env.NODE_ENV.exports.useRef (~/demo/node_modules/react/cjs/react.development.js:1219:33)
    at exports.useKeenSlider (~/demo/node_modules/keen-slider/react.js:1:14847)
    at NestedClientSliderComponent (~/demo/src/nestedClientSliderComponent.tsx:8:23)
    at Object.react_stack_bottom_frame (~/demo/node_modules/.vite/deps_ssr/react-dom_server__edge.js:16041:18)
    at renderWithHooks (~/demo/node_modules/.vite/deps_ssr/react-dom_server__edge.js:12947:24)
    at renderElement (~/demo/node_modules/.vite/deps_ssr/react-dom_server__edge.js:13207:25)
    at retryNode (~/demo/node_modules/.vite/deps_ssr/react-dom_server__edge.js:13815:43)
    at renderNodeDestructive (~/demo/node_modules/.vite/deps_ssr/react-dom_server__edge.js:13775:270)
    at renderNode (~/demo/node_modules/.vite/deps_ssr/react-dom_server__edge.js:14115:20)
    at renderChildrenArray (~/demo/node_modules/.vite/deps_ssr/react-dom_server__edge.js:14011:11)
TypeError: Cannot read properties of null (reading 'useRef')
    at process.env.NODE_ENV.exports.useRef (~/demo/node_modules/react/cjs/react.development.js:1219:33)
    at exports.useKeenSlider (~/demo/node_modules/keen-slider/react.js:1:14847)
    at NestedClientSliderComponent (~/demo/src/nestedClientSliderComponent.tsx:8:23)
    at Object.react_stack_bottom_frame (~/demo/node_modules/.vite/deps_ssr/react-dom_server__edge.js:16041:18)
    at renderWithHooks (~/demo/node_modules/.vite/deps_ssr/react-dom_server__edge.js:12947:24)
    at renderElement (~/demo/node_modules/.vite/deps_ssr/react-dom_server__edge.js:13207:25)
    at retryNode (~/demo/node_modules/.vite/deps_ssr/react-dom_server__edge.js:13815:43)
    at renderNodeDestructive (~/demo/node_modules/.vite/deps_ssr/react-dom_server__edge.js:13775:270)
    at renderNode (~/demo/node_modules/.vite/deps_ssr/react-dom_server__edge.js:14115:20)
    at renderChildrenArray (~/demo/node_modules/.vite/deps_ssr/react-dom_server__edge.js:14011:11)

Validations

Metadata

Metadata

Assignees

No one assigned

    Type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions