fix(sdk-react): make useSignal work with SSR #660
Merged
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Current behavior
A component that uses
useSignal
will error out during server-side rendering. For example, a simple Client Component like this in NextJS App Router (though the problem is not specific to NextJS)This will produce the following error
Desired behavior
The real value is only available in a browser, but the component should be able to render with some initial value on the server.
Solution
from
useSyncExternalStore
docsuseSyncExternalStore
hasgetServerSnapshot
argument exactly for this case. The proposed solution adds an optional second argument touseSignal
that can be used if someone needs SSR. If SSR is not needed, the argument can be omitted.Example usage when SSR is needed
const isMounted = useSignal(backButton.isMounted, false)
Example usage when SSR is not needed
const isMounted = useSignal(backButton.isMounted)
Breaking changes
None