2026 কভার হুক, স্টেট ম্যানেজমেন্ট, পারফরম্যান্স অপ্টিমাইজেশান, রিঅ্যাক্ট 19 এর নতুন বৈশিষ্ট্য এবং টাইপস্ক্রিপ্ট প্যাটার্নগুলিতে সাক্ষাত্কারের প্রশ্নগুলির প্রতিক্রিয়া জানান৷ এই নির্দেশিকাটি জুনিয়র এবং সিনিয়র উভয় স্তরেই সবচেয়ে বেশি জিজ্ঞাসিত প্রতিক্রিয়া প্রশ্নগুলিকে কভার করে।
📋 Table of Contents
মূল প্রতিক্রিয়া প্রশ্ন
1. ভার্চুয়াল DOM কি এবং কিভাবে পুনর্মিলন কাজ করে?
ভার্চুয়াল DOM হল আসল DOM-এর একটি হালকা জাভাস্ক্রিপ্ট উপস্থাপনা। যখন রাষ্ট্র পরিবর্তন হয়:
- প্রতিক্রিয়া একটি নতুন ভার্চুয়াল DOM ট্রি তৈরি করে
- ভিন্ন ভিন্ন অ্যালগরিদম নতুন বনাম পূর্ববর্তী ভার্চুয়াল DOM এর তুলনা করে
- প্রকৃত DOM-এ শুধুমাত্র পরিবর্তিত নোড আপডেট করা হয়
- আপডেটের এই ব্যাচিং প্রতিক্রিয়াকে কার্যকরী করে তোলে
প্রতিক্রিয়া 18+ সমসাময়িক রেন্ডারিং ব্যবহার করে — জরুরী আপডেটগুলিকে অগ্রাধিকার দিয়ে রেন্ডারিংকে বিরতি দিতে, বাধা দিতে এবং পুনরায় শুরু করতে পারে।
2. ইউজ ইফেক্ট এবং এর সাধারণ অসুবিধাগুলি ব্যাখ্যা কর
import { useEffect, useState } from 'react';
function UserProfile({ userId }: { userId: number }) {
const [user, setUser] = useState<User | null>(null);
// Correct: cleanup function + proper dependencies
useEffect(() => {
let cancelled = false; // prevent stale closure
async function fetchUser() {
const data = await api.getUser(userId);
if (!cancelled) setUser(data); // only update if still mounted
}
fetchUser();
return () => { cancelled = true; }; // cleanup
}, [userId]); // dependency array
// PITFALL 1: missing dependency
// useEffect(() => { fetchUser(userId); }, []);
// This won't re-run when userId changes!
// PITFALL 2: object/array in deps (new reference every render)
// useEffect(() => { ... }, [options]); // infinite loop if options = {}
// Fix: useMemo(() => options, [dep1, dep2])
// PITFALL 3: no cleanup for subscriptions
useEffect(() => {
const sub = websocket.subscribe(userId, setUser);
return () => sub.unsubscribe(); // ALWAYS cleanup subscriptions!
}, [userId]);
return user ? <Profile user={user} /> : <Loading />;
}
3. কখন আপনি useMemo এবং useCallback ব্যবহার করবেন?
// useMemo — memoize expensive computed value
const filteredUsers = useMemo(
() => users.filter(u => u.active && u.role === selectedRole),
[users, selectedRole] // recompute only when these change
);
// useCallback — memoize function reference
const handleDelete = useCallback(
(userId: number) => {
setUsers(prev => prev.filter(u => u.id !== userId));
},
[] // no deps — stable reference
);
// Use useMemo when:
// - Expensive computation (sorting, filtering large arrays)
// - Object/array passed to children with React.memo
// - Dependency for other hooks
// Use useCallback when:
// - Passing to child component wrapped in React.memo
// - As dependency in useEffect to prevent re-runs
// DON'T overuse — memoization has overhead!
// Bad: const value = useMemo(() => a + b, [a, b]); // trivial, skip it
4. React.memo কি এবং কখন এটি ব্যবহার করবেন?
// React.memo — prevent re-render if props haven't changed
const ExpensiveList = React.memo(function ExpensiveList({ items, onItemClick }: Props) {
console.log('ExpensiveList rendered');
return (
<ul>
{items.map(item => (
<li key={item.id} onClick={() => onItemClick(item.id)}>
{item.name}
</li>
))}
</ul>
);
});
// Parent using it correctly
function Parent() {
const [count, setCount] = useState(0);
const [items] = useState(bigItemList);
// useCallback ensures stable reference (required for memo to work)
const handleClick = useCallback((id: number) => {
console.log('clicked', id);
}, []);
return (
<div>
<button onClick={() => setCount(c => c + 1)}>Count: {count}</button>
{/* ExpensiveList won't re-render when count changes */}
<ExpensiveList items={items} onItemClick={handleClick} />
</div>
);
}
রাজ্য ব্যবস্থাপনা
5. কখন আপনি Redux বনাম Zustand বনাম প্রসঙ্গ API ব্যবহার করবেন?
| টুল | কখন ব্যবহার করুন | কখন এড়িয়ে চলুন |
|---|---|---|
| প্রসঙ্গ API | থিম, লোকেল, অথ স্টেট (কদাচিৎ আপডেট) | ঘন ঘন আপডেট (পুনরায় রেন্ডার হওয়ার কারণ) |
| জুস্ট্যান্ড | বেশিরভাগ অ্যাপের গ্লোবাল স্টেট প্রয়োজন | খুব জটিল ইভেন্ট সোর্সিং প্রয়োজন |
| রেডাক্স টুলকিট | বড় দল, জটিল অবস্থা, টাইম-ট্রাভেল ডিবাগিং | সহজ অ্যাপস (অতিরিক্ত) |
| TanStack ক্যোয়ারী | সার্ভারের অবস্থা (সর্বদা) | UI রাজ্যের জন্য নয় |
19টি প্রশ্নের উত্তর দিন
6. সার্ভার উপাদান কি এবং কিভাবে তারা ক্লায়েন্ট উপাদান থেকে আলাদা?
// Server Component (default in Next.js App Router)
// - Runs only on server, never on client
// - Can access databases, file system directly
// - Zero JS sent to client (except HTML)
// - Cannot use state, effects, event handlers
async function ProductList() { // no 'use client'
const products = await db.products.findMany(); // direct DB access!
return (
<ul>
{products.map(p => <ProductCard key={p.id} product={p} />)}
</ul>
);
}
// Client Component (must add 'use client')
// - Runs on both server (initial HTML) and client (hydration)
// - Can use useState, useEffect, event handlers
// - Receives props from Server Components
'use client';
function AddToCart({ productId }: { productId: number }) {
const [added, setAdded] = useState(false);
return (
<button onClick={() => {
addToCart(productId);
setAdded(true);
}}>
{added ? 'Added!' : 'Add to Cart'}
</button>
);
}
7. প্রতিক্রিয়া 19 এর নতুন বৈশিষ্ট্যগুলি কী কী?
- সার্ভার অ্যাকশন— অ্যাসিঙ্ক ফাংশন যা সার্ভারে চলে, ক্লায়েন্ট থেকে কল করা যায়
- use() হুক– রেন্ডারে প্রতিশ্রুতি এবং প্রসঙ্গ পড়ুন (কিছু ইউজ ইফেক্ট প্যাটার্ন প্রতিস্থাপন করে)
- ফর্ম কর্ম— সার্ভার ফাংশন সহ নেটিভ ফর্ম হ্যান্ডলিং
- আশাবাদী আপডেট– অবিলম্বে UI প্রতিক্রিয়ার জন্য Optimistic() ব্যবহার করুন
- নথি মেটাডেটা— শিরোনাম, উপাদান সরাসরি মেটা ট্যাগ
- সম্পদ লোড হচ্ছে— ছবি এবং CSS এর জন্য সাসপেন্স ইন্টিগ্রেশন
8. আপনি কীভাবে প্রতিক্রিয়াতে ত্রুটিগুলি পরিচালনা করবেন?
// Error Boundary (class component, required for now)
class ErrorBoundary extends React.Component<
{ fallback: React.ReactNode; children: React.ReactNode },
{ hasError: boolean }
> {
state = { hasError: false };
static getDerivedStateFromError() {
return { hasError: true };
}
componentDidCatch(error: Error, info: React.ErrorInfo) {
logErrorToService(error, info);
}
render() {
if (this.state.hasError) return this.props.fallback;
return this.props.children;
}
}
// Usage
<ErrorBoundary fallback={<ErrorPage />}>
<UserProfile />
</ErrorBoundary>
// React 19: useErrorBoundary hook coming (use 'react-error-boundary' lib now)
সাক্ষাত্কারের প্রস্তুতি গ্রহণ করুন: হুকগুলি গভীরভাবে বুঝুন (বিশেষ করে ইফেক্ট নির্ভরতা ব্যবহার করুন), কখন অপ্টিমাইজ করতে হবে তা জানুন (React.memo + useCallback/useMemo), সার্ভার/ক্লায়েন্ট উপাদান বিভক্ত ব্যাখ্যা করুন এবং বর্তমান অবস্থা ব্যবস্থাপনা বিকল্পগুলি জানুন। এই ধারণাগুলিকে শুধুমাত্র তাত্ত্বিকভাবে নয়, অভিজ্ঞতার সাথে বোঝার জন্য কয়েকটি প্রোডাকশন অ্যাপ তৈরি করুন।
🔗 Share this article
✍️ Leave a Comment