Mastering الگوهای طراحی React: HOC ، غرفه های ارائه شده و اجزای مرکب

مقدمه
React یکی از محبوب ترین کتابخانه های جبهه است که به دلیل معماری مبتنی بر مؤلفه شناخته شده است. با این حال ، با رشد برنامه ها ، مدیریت قابلیت استفاده مجدد ، حالت و ساختار چالش برانگیز می شود. اینجاست الگوهای طراحی وارد شوید. در این وبلاگ ، ما سه الگوی واکنش اساسی را کشف خواهیم کرد: اجزای مرتبه بالاتر (HOC) ، غرفه های ارائه شده و اجزای مرکببشر این الگوهای در نوشتن کد مقیاس پذیر و قابل نگهداری کمک می کند.
1⃣ مؤلفه های مرتبه بالاتر (HOC)
مؤلفه مرتبه بالاتر چیست؟
بوها مؤلفه مرتبه بالاتر (HOC) تابعی است که یک مؤلفه را می گیرد و یک مؤلفه پیشرفته را برمی گرداند با قابلیت های اضافی Hocs برای استفاده مجدد از کد وت انتزاع منطقیبشر
مثال: ورود به فعالیت کاربر با یک تعقیب
import React from "react";
// Higher-Order Component
function withLogger(WrappedComponent) {
return function EnhancedComponent(props) {
console.log(`Component ${WrappedComponent.name} rendered!`);
return <WrappedComponent {...props} />;
};
}
// Regular Component
function Button({ label }) {
return <button>{label}</button>;
}
// Enhanced Component
const ButtonWithLogger = withLogger(Button);
export default function App() {
return <ButtonWithLogger label="Click Me" />;
}
چه موقع از تعقیب استفاده کنیم؟
✅ احراز هویت و مجوز
✅ ورود به سیستم و تجزیه و تحلیل
✅ واکشی و ذخیره اطلاعات
2 ⃣ ارائه غرفه
غرفه های رندر چیست؟
بوها پیشرو تابعی است که به عنوان یک غرفه به یک مؤلفه منتقل می شود. مؤلفه کودک سپس این عملکرد را برای ارائه محتوای پویا فرا می خواند. این الگوی وقتی مفید است اشتراک منطق بین مؤلفه هابشر
مثال: مؤلفه ردیاب ماوس
import React, { useState } from "react";
// Component using Render Props
function MouseTracker({ render }) {
const [position, setPosition] = useState({ x: 0, y: 0 });
const handleMouseMove = (event) => {
setPosition({ x: event.clientX, y: event.clientY });
};
return <div onMouseMove={handleMouseMove}>{render(position)}</div>;
}
// Using MouseTracker in App
export default function App() {
return (
<MouseTracker
render={({ x, y }) => (
<h2>
Mouse Position: ({x}, {y})
</h2>
)}
/>
);
}
چه موقع از غرفه های رندر استفاده کنیم؟
✅ رسیدگی به در چندین مؤلفه
✅ جلوه های انیمیشن
string رسیدگی
3 ⃣ اجزای مرکب
یک مؤلفه مرکب چیست؟
بوها ترکیب الگویی است که چندین مؤلفه به عنوان یک واحد واحد با هم کار می کنند و امکان API تمیز و انعطاف پذیر را فراهم می کند. این الگوی برای طراحی مؤلفه های UI قابل استفاده مجدد مانند زبانه ها ، مدالها و آکاردئون ها مفید است.
مثال: جزء زبانه های سفارشی
import React, { useState } from "react";
function Tabs({ children }) {
const [activeIndex, setActiveIndex] = useState(0);
return React.Children.map(children, (child, index) => {
if (child.type === TabList) {
return React.cloneElement(child, { activeIndex, setActiveIndex });
}
if (child.type === TabPanel) {
return activeIndex === index - 1 ? child : null; // Only show active panel
}
return child;
});
}
function TabList({ children, activeIndex, setActiveIndex }) {
return React.Children.map(children, (child, index) =>
React.cloneElement(child, {
isActive: activeIndex === index,
onClick: () => setActiveIndex(index),
})
);
}
function Tab({ children, isActive, onClick }) {
return (
<button onClick={onClick} style={{ fontWeight: isActive ? "bold" : "normal" }}>
{children}
</button>
);
}
function TabPanel({ children }) {
return <div>{children}</div>;
}
// Usage
export default function App() {
return (
<Tabs>
<TabList>
<Tab>Tab 1</Tab>
<Tab>Tab 2</Tab>
</TabList>
<TabPanel>Content of Tab 1</TabPanel>
<TabPanel>Content of Tab 2</TabPanel>
</Tabs>
);
}
چه موقع از اجزای مرکب استفاده کنیم؟
✅ زبانه ها و آکاردئون ها
✅ مدالها و دیالوگ ها
✅ منوهای کشویی
پایان
الگوهای طراحی واکنش در نوشتن کمک می کند مقیاس پذیر ، قابل استفاده مجدد و قابل نگهداری کد در اینجا یک خلاصه سریع وجود دارد:
الگو | مورد استفاده | نمونه |
---|---|---|
اجزای مرتبه بالاتر (HOC) | استفاده مجدد از کد ، احراز هویت ، تجزیه و تحلیل | withLogger(Component) |
ارائه غرفه | رندر پویا UI ، وضعیت به اشتراک گذاری | {render: (props) => |
اجزای ترکیب | طراحی اجزای UI قابل استفاده و قابل استفاده مجدد |
|
هر الگوی نقاط قوت خود را دارد و انتخاب مناسب به مشکلی که حل می کنید بستگی دارد. تسلط بر این الگوهای شما را به یک توسعه دهنده React بهتر تبدیل می کند! 🚀
از کدام الگوی بیشتر استفاده می کنید؟ در نظرات به من اطلاع دهید! 👇