Performance: Shared state across layouts
MEDIUM IMPACT
This affects page load speed and interaction responsiveness by how state is managed and shared between layouts and pages.
import { createContext, useContext, useState, useEffect } from 'react'; const UserContext = createContext(null); export function UserProvider({ children }) { const [user, setUser] = useState(null); useEffect(() => { fetch('/api/auth').then(res => res.json()).then(data => setUser(data.user)); }, []); return <UserContext.Provider value={user}>{children}</UserContext.Provider>; } // Wrap root layout with <UserProvider> and consume user via useContext in nested layouts
import { useState, useEffect } from 'react'; export default function Layout({ children }) { const [user, setUser] = useState(null); useEffect(() => { fetch('/api/auth').then(res => res.json()).then(data => setUser(data.user)); }, []); return <>{children}</>; } // Each layout fetches user separately causing repeated requests
| Pattern | DOM Operations | Reflows | Paint Cost | Verdict |
|---|---|---|---|---|
| Independent state per layout | Multiple fetches and state updates | Multiple reflows per layout | Higher paint cost due to repeated updates | [X] Bad |
| Centralized shared state via Context | Single fetch and state update | Single reflow for shared state change | Lower paint cost with fewer updates | [OK] Good |