askill
prevent-hydration-mismatch-without-flickering

prevent-hydration-mismatch-without-flickeringSafety 75Repository

Prevent Hydration Mismatch Without Flickering

0 stars
1.2k downloads
Updated 2/12/2026

Package Files

Loading files...
SKILL.md

Prevent Hydration Mismatch Without Flickering

When rendering content that depends on client-side storage (localStorage, cookies), avoid both SSR breakage and post-hydration flickering by injecting a synchronous script that updates the DOM before React hydrates.

Incorrect (breaks SSR):

function ThemeWrapper({ children }: { children: ReactNode }) {
  // localStorage is not available on server - throws error
  const theme = localStorage.getItem('theme') || 'light';

  return <div className={theme}>{children}</div>;
}

Server-side rendering will fail because localStorage is undefined.

Incorrect (visual flickering):

function ThemeWrapper({ children }: { children: ReactNode }) {
  const [theme, setTheme] = useState('light');

  useEffect(() => {
    // Runs after hydration - causes visible flash
    const stored = localStorage.getItem('theme');
    if (stored) {
      setTheme(stored);
    }
  }, []);

  return <div className={theme}>{children}</div>;
}

Component first renders with default value (light), then updates after hydration, causing a visible flash of incorrect content.

Correct (no flicker, no hydration mismatch):

function ThemeWrapper({ children }: { children: ReactNode }) {
  return (
    <>
      <div id="theme-wrapper">{children}</div>
      <script
        dangerouslySetInnerHTML={{
          __html: `
            (function() {
              try {
                var theme = localStorage.getItem('theme') || 'light';
                var el = document.getElementById('theme-wrapper');
                if (el) el.className = theme;
              } catch (e) {}
            })();
          `,
        }}
      />
    </>
  );
}

The inline script executes synchronously before showing the element, ensuring the DOM already has the correct value. No flickering, no hydration mismatch.

This pattern is especially useful for theme toggles, user preferences, authentication states, and any client-only data that should render immediately without flashing default values.

Install

Download ZIP
Requires askill CLI v1.0+

AI Quality Score

76/100Analyzed 2/20/2026

Well-written technical skill explaining a React/SSR pattern to prevent hydration mismatch. Provides clear wrong/right examples with actionable code. Located in dedicated skills folder suggesting reusability. Missing tags for discoverability. Strong clarity and actionability, moderate completeness and reusability.

75
85
60
65
85

Metadata

Licenseunknown
Version-
Updated2/12/2026
Publisherihj04982

Tags

No tags yet.