React7 min read
React Design Patterns
Master common React design patterns for better code.
Sarah Johnson
December 20, 2025
0.0k0
Common patterns for scalable React apps.
Container/Presentational Pattern
// Container (logic)
function UserContainer() {
const [users, setUsers] = useState([]);
useEffect(() => {
fetchUsers().then(setUsers);
}, []);
return <UserList users={users} />;
}
// Presentational (UI)
function UserList({ users }) {
return (
<ul>
{users.map(user => <li key={user.id}>{user.name}</li>)}
</ul>
);
}
Provider Pattern
const ThemeContext = createContext();
export function ThemeProvider({ children }) {
const [theme, setTheme] = useState('light');
return (
<ThemeContext.Provider value={{ theme, setTheme }}>
{children}
</ThemeContext.Provider>
);
}
export const useTheme = () => useContext(ThemeContext);
Compound Component Pattern
function Select({ children, value, onChange }) {
return (
<select value={value} onChange={onChange}>
{children}
</select>
);
}
Select.Option = function Option({ value, children }) {
return <option value={value}>{children}</option>;
};
// Usage
<Select value={selected} onChange={setSelected}>
<Select.Option value="1">Option 1</Select.Option>
<Select.Option value="2">Option 2</Select.Option>
</Select>
State Reducer Pattern
function useCounter(reducer) {
const [count, setCount] = useState(0);
const increment = () => {
setCount(current => reducer(current, 'INCREMENT'));
};
return { count, increment };
}
Remember
- Choose pattern based on needs
- Container/Presentational for separation
- Provider for global state
- Compound for flexible APIs
Next: Learn clean code practices!
#React#Patterns#Architecture#Advanced