pmndrs/zustand

Error: Missing getServerSnapshot, which is required for server-rendered content. Will revert to client rendering.

Closed this issue · 5 comments

With React 18, this error occurs when using a useStore hook:

// useDarkMode.ts
import create from 'zustand'
import { persist } from 'zustand/middleware'

type darkModeState = {
  /**
   * State of user settings
   */
  isDarkMode: boolean
  toggleDarkMode: () => void
}

export const useDarkMode = create<darkModeState>(
  persist(
    (set) => ({
      isDarkMode: false,
      toggleDarkMode: () =>
        set(({ isDarkMode }) => ({
          isDarkMode: !isDarkMode
        }))
    }),
    { name: 'useDarkMode' }
  )
)
// app.tsx

import { useMemo } from 'react'
import { cssStringFromTheme } from '../css/cssStringFromTheme'
import { useDarkMode } from '../hooks/useDarkMode'
import { darkTheme } from '../themes/darkTheme'
import { lightTheme } from '../themes/lightTheme'
import { Box } from './Box'

export const ThemeSwitch = () => {
  const isDarkMode = useDarkMode((s) => s.isDarkMode)
  const toggleDarkMode = useDarkMode((s) => s.toggleDarkMode)

  const themeObject = useMemo(() => {
    if (isDarkMode) return darkTheme
    else return lightTheme
  }, [isDarkMode])

  return (
    <style global jsx>
      {`
        :root {
          ${cssStringFromTheme(themeObject)}
        }

        @media (prefers-color-scheme: dark) {
          :root {
            ${cssStringFromTheme(isDarkMode ? darkTheme : themeObject)}
          }
        }
      `}
    </style>
  )
}

this error occurs:

image

This is using zustand@4.0.0-beta.2, react@18 and next@12.1

Ohhh, I wasn't aware that.. I was expecting it will revert to client rendering silently.
Thanks for reporting.
Is this warning only problem? Hmm, I think we should follow how react-redux does. 🤔

Can you try this?
https://ci.codesandbox.io/status/pmndrs/zustand/pr/550/builds/233894
Find "Local Install Instructions" ☝️

yeah it seems to work, thanks

https://codesandbox.io/s/react-typescript-forked-7fyb80?file=/src/App.tsx

looking forward to have this in 4.0.0-beta.3

I seem to be experiencing this issue in open-sauced/app#1734 with Zustand 4.3.2 with Next.js 13.4.7. Still digging into why the fix here doesn't kick in. 🤔