Performance: Context best practices
MEDIUM IMPACT
This affects interaction responsiveness and rendering speed by controlling how often components re-render when context changes.
const CountContext = React.createContext(0); const UserContext = React.createContext({ name: '', age: 0 }); const ThemeContext = React.createContext('light'); function App() { const [count, setCount] = React.useState(0); const [user, setUser] = React.useState({ name: 'Alice', age: 25 }); const [theme, setTheme] = React.useState('light'); return ( <CountContext.Provider value={count}> <UserContext.Provider value={user}> <ThemeContext.Provider value={theme}> <Counter /> <UserProfile /> <ThemeSwitcher /> </ThemeContext.Provider> </UserContext.Provider> </CountContext.Provider> ); }
const MyContext = React.createContext({ count: 0, user: { name: '', age: 0 }, theme: 'light' }); function App() { const [count, setCount] = React.useState(0); const [user, setUser] = React.useState({ name: 'Alice', age: 25 }); const [theme, setTheme] = React.useState('light'); return ( <MyContext.Provider value={{ count, user, theme }}> <Counter /> <UserProfile /> <ThemeSwitcher /> </MyContext.Provider> ); }
| Pattern | DOM Operations | Reflows | Paint Cost | Verdict |
|---|---|---|---|---|
| Single large context with multiple values | Many components re-render unnecessarily | Multiple reflows if DOM changes | Higher paint cost due to frequent updates | [X] Bad |
| Multiple small contexts with focused values | Only relevant components re-render | Fewer reflows | Lower paint cost | [OK] Good |
| Passing inline functions in context | Triggers re-renders every render | Multiple reflows | Higher paint cost | [X] Bad |
| Memoized functions in context | Stable context value prevents re-renders | Minimal reflows | Lower paint cost | [OK] Good |