Home >Web Front-end >JS Tutorial >Design Patterns in React [HOCs, Render Props, Hooks]
Design patterns are proven solutions to common problems in software development. In React, applying these patterns can make your code more modular, reusable, and easier to maintain. In this article, we'll explore some of the most common and useful design patterns in React: Higher Order Components (HOCs), Render Props, and Hooks.
Higher Order Components (HOCs) are functions that receive a component and return a new component with additional functionality. They are often used to add common logic to multiple components.
Let's create a simple HOC that adds logging functionality at the click of a button:
import React from 'react'; // Higher Order Component const withLogger = (WrappedComponent) => { return class extends React.Component { handleClick = () => { console.log('Button clicked!'); }; render() { return <WrappedComponent onClick={this.handleClick} {...this.props} />; } }; }; // Componente Original const Button = ({ onClick, children }) => ( <button onClick={onClick}>{children}</button> ); // Componente Envolvido com HOC const ButtonWithLogger = withLogger(Button); export default ButtonWithLogger;
Render Props is a technique that allows you to share logic between components using a prop whose value is a function. This function receives the data needed to render the content.
Let's create a component that manages the visibility state and provides this logic through render props:
import React, { useState } from 'react'; // Componente de Render Props const Toggle = ({ children }) => { const [isVisible, setIsVisible] = useState(false); const toggleVisibility = () => setIsVisible(!isVisible); return children({ isVisible, toggleVisibility }); }; // Componente que utiliza Render Props const App = () => ( <Toggle> {({ isVisible, toggleVisibility }) => ( <div> <button onClick={toggleVisibility}>Toggle</button> {isVisible && <p>Content is visible</p>} </div> )} </Toggle> ); export default App;
Hooks are a recent addition to React that allow you to use state and other React functionality without writing a class. They are a powerful and flexible alternative to HOCs and Render Props.
Let's create a custom hook to manage the visibility state:
import { useState } from 'react'; // Hook Personalizado const useToggle = (initialState = false) => { const [isVisible, setIsVisible] = useState(initialState); const toggleVisibility = () => setIsVisible(!isVisible); return [isVisible, toggleVisibility]; }; // Componente que utiliza o Hook const App = () => { const [isVisible, toggleVisibility] = useToggle(); return ( <div> <button onClick={toggleVisibility}>Toggle</button> {isVisible && <p>Content is visible</p>} </div> ); }; export default App;
Higher Order Components (HOCs):
Render Props:
Hooks:
Each design pattern in React has its own use cases and benefits. Higher Order Components (HOCs) are useful for adding common behavior to multiple components, while Render Props allow you to flexibly share complex logic. Hooks, in turn, provide a simple and powerful way to manage state and side effects in functional components. Choosing the right pattern depends on your project's specific needs and your team's preferences.
Implementing these design patterns in your React applications can make your code more modular, reusable, and easier to maintain, resulting in a more robust and scalable codebase.
I hope this article was useful to you. If you have any questions or suggestions, feel free to comment!
The above is the detailed content of Design Patterns in React [HOCs, Render Props, Hooks]. For more information, please follow other related articles on the PHP Chinese website!