Vocabulary: Higher-Order Component (HOC)
A design pattern used in React that is a function that takes in a component and returns a new component. (getting all this from ChatGPT)
import React from 'react'; function Greeting(props) { return <h1>Hello, {props.name}!</h1>; } export default Greeting;
import React from 'react'; function withBorder(Component) { return function(props) { return ( <div style={{ border: '2px solid black', padding: '10px' }}> <Component {...props} /> </div> ); }; } export default withBorder;
import React from 'react'; import Greeting from './Greeting'; import withBorder from './withBorder'; // Using the HOC to enhance the component const EnhancedGreeting = withBorder(Greeting); function App() { return ( <div> <Greeting name="Alice" /> <EnhancedGreeting name="Bob" /> </div> ); } export default App;
or something like
import React from 'react'; const withLoading = (WrappedComponent) => { return (props) => { const { isLoading, ...restProps } = props; if (isLoading) { return <div>Loading...</div>; // Display a loading indicator } else { return <WrappedComponent {...restProps} />; } }; }; export default withLoading;
import React from 'react'; import withLoading from './withLoading'; const DataComponent = ({ data }) => { return ( <div> <h1>Data Component</h1> <p>{data}</p> </div> ); }; export default withLoading(DataComponent);
import React, { useState, useEffect } from 'react'; import DataComponent from './DataComponent'; const App = () => { const [isLoading, setIsLoading] = useState(true); const [data, setData] = useState(''); useEffect(() => { // Simulate an asynchronous operation (e.g., fetching data) setTimeout(() => { setData('Fetched data'); setIsLoading(false); }, 2000); }, []); return ( <div> <h1>App</h1> <DataComponent isLoading={isLoading} data={data} /> </div> ); }; export default App;