Skip to content

fix(solid-router): loaders being called twice during SSR #4574

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged

Conversation

brenelz
Copy link
Contributor

@brenelz brenelz commented Jul 4, 2025

Basically my understanding is that the load function gets called once during SSR but right now our Transitioner calls it again as it appears createRenderEffect run on the server too where as the useEffect in React doesn't.

The fix is just to bail out if its running on the server. Feels kinda hacky but it works.

Copy link

nx-cloud bot commented Jul 4, 2025

View your CI Pipeline Execution ↗ for commit b0dc899

Command Status Duration Result
nx affected --targets=test:eslint,test:unit,tes... ✅ Succeeded 4m 25s View ↗
nx run-many --target=build --exclude=examples/*... ✅ Succeeded 30s View ↗

☁️ Nx Cloud last updated this comment at 2025-07-05 02:08:09 UTC

Copy link

pkg-pr-new bot commented Jul 4, 2025

More templates

@tanstack/arktype-adapter

npm i https://pkg.pr.new/TanStack/router/@tanstack/arktype-adapter@4574

@tanstack/directive-functions-plugin

npm i https://pkg.pr.new/TanStack/router/@tanstack/directive-functions-plugin@4574

@tanstack/eslint-plugin-router

npm i https://pkg.pr.new/TanStack/router/@tanstack/eslint-plugin-router@4574

@tanstack/history

npm i https://pkg.pr.new/TanStack/router/@tanstack/history@4574

@tanstack/react-router

npm i https://pkg.pr.new/TanStack/router/@tanstack/react-router@4574

@tanstack/react-router-devtools

npm i https://pkg.pr.new/TanStack/router/@tanstack/react-router-devtools@4574

@tanstack/react-router-with-query

npm i https://pkg.pr.new/TanStack/router/@tanstack/react-router-with-query@4574

@tanstack/react-start

npm i https://pkg.pr.new/TanStack/router/@tanstack/react-start@4574

@tanstack/react-start-client

npm i https://pkg.pr.new/TanStack/router/@tanstack/react-start-client@4574

@tanstack/react-start-plugin

npm i https://pkg.pr.new/TanStack/router/@tanstack/react-start-plugin@4574

@tanstack/react-start-server

npm i https://pkg.pr.new/TanStack/router/@tanstack/react-start-server@4574

@tanstack/router-cli

npm i https://pkg.pr.new/TanStack/router/@tanstack/router-cli@4574

@tanstack/router-core

npm i https://pkg.pr.new/TanStack/router/@tanstack/router-core@4574

@tanstack/router-devtools

npm i https://pkg.pr.new/TanStack/router/@tanstack/router-devtools@4574

@tanstack/router-devtools-core

npm i https://pkg.pr.new/TanStack/router/@tanstack/router-devtools-core@4574

@tanstack/router-generator

npm i https://pkg.pr.new/TanStack/router/@tanstack/router-generator@4574

@tanstack/router-plugin

npm i https://pkg.pr.new/TanStack/router/@tanstack/router-plugin@4574

@tanstack/router-utils

npm i https://pkg.pr.new/TanStack/router/@tanstack/router-utils@4574

@tanstack/router-vite-plugin

npm i https://pkg.pr.new/TanStack/router/@tanstack/router-vite-plugin@4574

@tanstack/server-functions-plugin

npm i https://pkg.pr.new/TanStack/router/@tanstack/server-functions-plugin@4574

@tanstack/solid-router

npm i https://pkg.pr.new/TanStack/router/@tanstack/solid-router@4574

@tanstack/solid-router-devtools

npm i https://pkg.pr.new/TanStack/router/@tanstack/solid-router-devtools@4574

@tanstack/solid-start

npm i https://pkg.pr.new/TanStack/router/@tanstack/solid-start@4574

@tanstack/solid-start-client

npm i https://pkg.pr.new/TanStack/router/@tanstack/solid-start-client@4574

@tanstack/solid-start-plugin

npm i https://pkg.pr.new/TanStack/router/@tanstack/solid-start-plugin@4574

@tanstack/solid-start-server

npm i https://pkg.pr.new/TanStack/router/@tanstack/solid-start-server@4574

@tanstack/start-client-core

npm i https://pkg.pr.new/TanStack/router/@tanstack/start-client-core@4574

@tanstack/start-plugin-core

npm i https://pkg.pr.new/TanStack/router/@tanstack/start-plugin-core@4574

@tanstack/start-server-core

npm i https://pkg.pr.new/TanStack/router/@tanstack/start-server-core@4574

@tanstack/start-server-functions-client

npm i https://pkg.pr.new/TanStack/router/@tanstack/start-server-functions-client@4574

@tanstack/start-server-functions-fetcher

npm i https://pkg.pr.new/TanStack/router/@tanstack/start-server-functions-fetcher@4574

@tanstack/start-server-functions-server

npm i https://pkg.pr.new/TanStack/router/@tanstack/start-server-functions-server@4574

@tanstack/valibot-adapter

npm i https://pkg.pr.new/TanStack/router/@tanstack/valibot-adapter@4574

@tanstack/virtual-file-routes

npm i https://pkg.pr.new/TanStack/router/@tanstack/virtual-file-routes@4574

@tanstack/zod-adapter

npm i https://pkg.pr.new/TanStack/router/@tanstack/zod-adapter@4574

commit: b0dc899

@Ingramz
Copy link
Contributor

Ingramz commented Jul 5, 2025

Pointing out that the React version is using a useLayoutEffect utility function which corresponds to React.useLayoutEffect or React.useEffect depending on the environment.

export const useLayoutEffect =
typeof window !== 'undefined' ? React.useLayoutEffect : React.useEffect

This is then used throughout the Transitioner.

import { useLayoutEffect, usePrevious } from './utils'

There is also a rough equivalent for this in Solid version, but it isn't used anywhere.

export const useLayoutEffect =
typeof window !== 'undefined' ? Solid.createRenderEffect : Solid.createEffect

Instead, all such occurrences are currently using Solid.createRenderEffect directly.

Solid.createRenderEffect(() => {

Currently the pull request only changes the behavior of the first Solid.createRenderEffect to be not ran on server, but the 3 other occurrences still might. Shouldn't all of the Solid.createRenderEffect usages be uniformly treated to be not executed on the server and not just the first one?

@brenelz
Copy link
Contributor Author

brenelz commented Jul 6, 2025

Yeah i tried to touch as little as possible. I tried changing from a renderEffect to a createEffect but that broke some unit tests. Didn't look too much further after that

@SeanCassiere SeanCassiere changed the title fix: solid loaders getting called twice on ssr fix(solid-router): loaders being called twice during SSR Jul 6, 2025
@schiller-manuel schiller-manuel merged commit eb8a5f0 into TanStack:main Jul 6, 2025
5 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging this pull request may close these issues.

4 participants