🌐 Detecting your location…
📢 Advertisement — Configure AdSense in Appearance → Customize → AdSense Settings

प्रतिक्रिया साक्षात्कार प्रश्न 2026: हुक, सर्वर घटक और प्रदर्शन

⏱️3 min read  ·  578 words

2026 में रिएक्ट साक्षात्कार प्रश्न हुक, राज्य प्रबंधन, प्रदर्शन अनुकूलन, रिएक्ट 19 की नई सुविधाएँ और टाइपस्क्रिप्ट पैटर्न को कवर करते हैं। यह मार्गदर्शिका जूनियर और सीनियर दोनों स्तरों पर सबसे अधिक पूछे जाने वाले रिएक्ट प्रश्नों को शामिल करती है।

मुख्य प्रतिक्रिया प्रश्न

1. वर्चुअल DOM क्या है और समाधान कैसे काम करता है?

वर्चुअल DOM वास्तविक DOM का हल्का जावास्क्रिप्ट प्रतिनिधित्व है। जब राज्य बदलता है:

  1. रिएक्ट एक नया वर्चुअल DOM ट्री बनाता है
  2. डिफिंग एल्गोरिदम नए बनाम पिछले वर्चुअल DOM की तुलना करता है
  3. वास्तविक DOM में केवल परिवर्तित नोड ही अद्यतन किये जाते हैं
  4. अपडेट की यह बैचिंग रिएक्ट को परफॉर्मेंट बनाती है

रिएक्ट 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 — 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 बनाम Context API का उपयोग कब करना चाहिए?

औजार कब उपयोग करें कब से बचें
प्रसंग एपीआई थीम, स्थान, प्रामाणिक स्थिति (अक्सर अद्यतन) बार-बार अपडेट (पुनः प्रस्तुत करने का कारण बनता है)
ज़स्टैंड अधिकांश ऐप्स को वैश्विक स्थिति की आवश्यकता है बहुत जटिल इवेंट सोर्सिंग आवश्यकताएँ
रिडक्स टूलकिट बड़ी टीमें, जटिल स्थिति, समय-यात्रा डिबगिंग सरल ऐप्स (अत्यधिक)
टैनस्टैक क्वेरी सर्वर स्थिति (हमेशा) यूआई स्थिति के लिए नहीं

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 की नई विशेषताएं क्या हैं?

  • सर्वर क्रियाएँ– एसिंक फ़ंक्शंस जो सर्वर पर चलते हैं, क्लाइंट से कॉल करने योग्य
  • उपयोग() हुक– रेंडर में वादे और संदर्भ पढ़ें (कुछ उपयोग पैटर्न को प्रतिस्थापित करता है)
  • क्रियाएँ बनाएँ– सर्वर फ़ंक्शंस के साथ मूल फॉर्म हैंडलिंग
  • आशावादी अद्यतन– तत्काल यूआई फीडबैक के लिए ऑप्टिमिस्टिक() का उपयोग करें
  • दस्तावेज़ मेटाडेटा— शीर्षक, सीधे घटकों में मेटा टैग
  • संपत्ति लोड हो रही है– छवियों और सीएसएस के लिए सस्पेंस एकीकरण

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)

प्रतिक्रिया साक्षात्कार तैयारी: हुक को गहराई से समझें (विशेष रूप से उपयोग प्रभाव निर्भरताएं), जानें कि कब अनुकूलन करना है (रिएक्ट.मेमो + यूज़कॉलबैक/यूज़मेमो), सर्वर/क्लाइंट घटक विभाजन को समझाएं, और वर्तमान स्थिति प्रबंधन विकल्पों को जानें। इन अवधारणाओं को केवल सैद्धांतिक रूप से नहीं, बल्कि अनुभवात्मक रूप से समझने के लिए कुछ प्रोडक्शन ऐप्स बनाएं।

✍️ Leave a Comment

Your email address will not be published. Required fields are marked *

🌐 Read in:🇬🇧 English🇩🇪 Deutsch🇧🇷 Português🇸🇦 العربية🇮🇳 हिन्दी🇧🇩 বাংলা