In React, a wrapper component is often used to encapsulate or "wrap" other components to provide additional functionality, styling, or context. Here's how you can create and use a wrapper in React:
A basic wrapper passes children components inside it.
import React from "react";
const Wrapper = ({ children }) => {
return <div className="wrapper">{children}</div>;
};
export default Wrapper;
Usage:
import React from "react";
import Wrapper from "./Wrapper";
const App = () => {
return (
<Wrapper>
<h1>Hello, World!</h1>
<p>This is wrapped content.</p>
</Wrapper>
);
};
export default App;
You can also pass props to modify the wrapper behavior dynamically.
const Wrapper = ({ children, backgroundColor }) => {
const style = {
backgroundColor: backgroundColor || "white",
padding: "20px",
border: "1px solid #ccc",
};
return <div style={style}>{children}</div>;
};
export default Wrapper;
Usage:
<Wrapper backgroundColor="lightblue">
<h2>Dynamic Background Color</h2>
</Wrapper>
In more complex scenarios, you can use context to share state or functionality.
import React, { createContext, useState } from "react";
const ThemeContext = createContext();
const ThemeProvider = ({ children }) => {
const [theme, setTheme] = useState("light");
const toggleTheme = () => {
setTheme((prev) => (prev === "light" ? "dark" : "light"));
};
return (
<ThemeContext.Provider value={{ theme, toggleTheme }}>
{children}
</ThemeContext.Provider>
);
};
export { ThemeContext, ThemeProvider };
Usage:
import React, { useContext } from "react";
import { ThemeContext, ThemeProvider } from "./ThemeProvider";
const ThemedComponent = () => {
const { theme, toggleTheme } = useContext(ThemeContext);
return (
<div style={{ background: theme === "light" ? "#fff" : "#333", color: theme === "light" ? "#000" : "#fff" }}>
<p>Current Theme: {theme}</p>
<button onClick={toggleTheme}>Toggle Theme</button>
</div>
);
};
const App = () => {
return (
<ThemeProvider>
<ThemedComponent />
</ThemeProvider>
);
};
export default App;
You can use an HOC to wrap components with additional functionality.
const withWrapper = (Component) => (props) => {
return (
<div style={{ border: "2px solid red", padding: "10px" }}>
<Component {...props} />
</div>
);
};
export default withWrapper;
Usage: