روش : استفاده از فریمورکی مثل Next.js که تنظیمات SSR را ساده میکند.
مفهوم :
این باعث بهبود سرعت بارگذاری اولیه ، SEO و زمان تعامل کاربر میشود.
مثال Next.js :
// pages/index.tsx
export default function Home({ user }) {
return <div>Hello, {user.name}</div>;
}
export async function getServerSideProps() {
const res = await fetch("https://api.example.com/user");
const user = await res.json();
return { props: { user } };
}
SSR سفارشی (با استفاده از ReactDOMServer):
const html = ReactDOMServer.renderToString(<App />);
چه زمانی استفاده کنیم؟ : صفحات عمومی که نیاز به SEO یا بارگذاری سریع اولیه دارند (مثل صفحات لندینگ یا فروشگاههای اینترنتی).
کنترلشده : وضعیت فرم توسط React با useState مدیریت میشود.
const [value, setValue] = useState("");
<input value={value} onChange={(e) => setValue(e.target.value)} />;
کنترلنشده : وضعیت فرم توسط DOM با استفاده از ref کنترل میشود.
const inputRef = useRef();
<input ref={inputRef} />;
چه زمانی استفاده کنیم؟ :
مفهوم :
Error Boundaryها خطاهای رندرینگ ، متدهای lifecycle یا سازندهها در کامپوننتهای فرزند را میگیرند — ولی خطاهای event handler یا کد async را نه.
مثال :
class ErrorBoundary extends React.Component {
state = { hasError: false };
static getDerivedStateFromError() {
return { hasError: true };
}
componentDidCatch(error, info) {
// Log error to monitoring service
console.error(error, info);
}
render() {
return this.state.hasError ? (
<h1>Something went wrong.</h1>
) : (
this.props.children
);
}
}
// Usage
<ErrorBoundary>
<MyComponent />
</ErrorBoundary>;
چه زمانی استفاده کنیم؟ : دور کامپوننتهای بزرگ، صفحات، یا importهای داینامیک.
اصول کلیدی :
/features/user
/features/dashboard
/shared/components
Event Delegation : یک handler (مثلاً در document) رویدادهای بسیاری از عناصر فرزند را با استفاده از event bubbling دریافت میکند.
رویدادهای مصنوعی React :
React رویدادها را از طریق درخت virtual DOM حبابی میکند، نه DOM واقعی.
مثال :
function App() {
return <button onClick={() => console.log("clicked")}>Click Me</button>;
}
در پشت صحنه، این onClick توسط یک listener کلی روی ریشه کنترل میشود که باعث عملکرد بهتر و صرفهجویی در حافظه میشود.