A collection of common React design patterns for writing scalable and maintainable applications.
A collection of React design patterns to improve reusability, maintainability, and performance in modern React applications.
- Higher-Order Components (HOC)
- Render Props Pattern
- Compound Components
- Context API
- Fully typed with TypeScript
- Dark/Light theme toggle using Context API
advanced-react-patterns/
│── src/
│ ├── patterns/
│ │ ├── HigherOrderComponent/
│ │ │ ├── withLogger.tsx
│ │ │ ├── Example.tsx
│ │ ├── RenderProps/
│ │ │ ├── MouseTracker.tsx
│ │ │ ├── Example.tsx
│ │ ├── CompoundComponents/
│ │ │ ├── Tabs.tsx
│ │ │ ├── Example.tsx
│ │ ├── ContextAPI/
│ │ │ ├── ThemeProvider.tsx
│ │ │ ├── useTheme.ts
│ │ │ ├── Example.tsx
│ ├── App.tsx
│ ├── index.tsx
│── README.md
│── package.json
│── tsconfig.json
│── .gitignore
│── LICENSE
Ensure you have the following installed:
- Node.js (LTS recommended)
- npm (or
npx) - Git (for version control)
Clone the repo and install dependencies:
git clone https://github.com/root2ja/advanced-react-patterns.git
cd advanced-react-patterns
npm installStart the development server:
npm startThen open http://localhost:3000 in your browser.
🎭 Higher-Order Components
const EnhancedComponent = withLogger(MyComponent);🖱️ Render Props
<MouseTracker render={(position) => <p>Mouse is at {position.x}, {position.y}</p>} />🧩 Compound Components
<Tabs>
<Tabs.Tab label="Tab 1">Content for Tab 1</Tabs.Tab>
<Tabs.Tab label="Tab 2">Content for Tab 2</Tabs.Tab>
</Tabs>🎨 Context API for Theme Toggle
const { theme, setTheme } = useTheme();
<button onClick={() => setTheme(theme === "light" ? "dark" : "light")}>Toggle Theme</button>1️⃣ Contribution Guidelines Fork the repository. Create a new feature branch:
git checkout -b feature-branch-nameMake your changes and commit them:
git commit -m "Added new feature"Push to your fork and create a pull request. 2️⃣ Development Setup To enable hot reloading and debugging:
npm run devThis project is licensed under the MIT License – see the LICENSE file for details.
⭐ If you found this project useful, give it a star on GitHub! 💬 Feel free to open an issue if you have ideas or suggestions.