React Academy · पाठ

HOC को कस्टम हुक में रीफ़ैक्टर करना

withAuth HOC को चरण-दर-चरण useAuth हुक में बदलें।

पाठ 4, कुल 4 में से13 चरण

HOC को कस्टम हुक में रीफ़ैक्टर करना, CoddyKit पर React Academy का एक निःशुल्क पाठ है। यह 4 में से 4वाँ पाठ है। आप नीचे पूरा पाठ निःशुल्क पढ़ सकते हैं—फिर अंतर्निहित कोड संपादक और 24/7 एआई ट्यूटर के साथ ब्राउज़र में इसका व्यावहारिक अभ्यास कर सकते हैं। यह React Academy सीखने के मार्ग का हिस्सा है और आपकी प्रगति वेब तथा CoddyKit ऐप पर सिंक होती रहती है। React Academy पाठ्यक्रम में कुल 4 पाठ शामिल हैं।

स्वागत

इस पाठ में आप चरण-दर-चरण withAuth HOC को useAuth कस्टम हुक में पुनर्गठित करेंगे और ठीक-ठीक देखेंगे कि हुक वाला रूप अधिक साफ़ और परीक्षण में आसान क्यों है।

withAuth HOC (आरंभिक बिंदु)

HOC एक घटक लेता है, जाँचता है कि उपयोगकर्ता प्रमाणित है या नहीं, और प्रमाणित न होने पर /login पर पुनर्निर्देशित करता है। यह उपयोगकर्ता को प्रॉप के रूप में जोड़ता है।
function withAuth(Component) {
  return function AuthGuard(props) {
    const { user, loading } = useAuthState();
    if (loading) return <Spinner />;
    if (!user) return <Navigate to="/login" />;
    return <Component {...props} user={user} />;
  };
}

const ProtectedPage = withAuth(MyPage);

HOC की समस्याएँ

HOC: (1) DevTools में एक आवरण जोड़ता है, (2) `user` प्रॉप को अप्रत्यक्ष रूप से जोड़ता है—घटक को पहले से पता होना चाहिए कि वह इसकी अपेक्षा करे, (3) पूरे HOC आवरण को रेंडर किए बिना इसका परीक्षण करना कठिन है, (4) इसे अन्य हुक्स के साथ आसानी से संयोजित नहीं किया जा सकता।

चरण 1: तर्क को हुक में अलग करना

HOC का पूरा तर्क एक कस्टम हुक में ले जाएँ। हुक प्रमाणीकरण स्थिति सीधे लौटाता है—न कोई आवरण, न प्रॉप जोड़ना।
function useAuth() {
  const { user, loading } = useAuthState();
  return { user, loading, isAuthenticated: !!user };
}

चरण 2: हुक में पुनर्निर्देशन संभालना

पुनर्निर्देशन का तर्क एक अलग हुक में ले जाएँ, जैसे useRequireAuth, जो भीतर से navigate को कॉल करता है और उपयोगकर्ता लौटाता है।
function useRequireAuth(redirectTo = '/login') {
  const { user, loading } = useAuth();
  const navigate = useNavigate();

  useEffect(() => {
    if (!loading && !user) navigate(redirectTo);
  }, [user, loading, navigate, redirectTo]);

  return { user, loading };
}

चरण 3: घटक को अपडेट करना

HOC आवरण को घटक के भीतर सीधे हुक कॉल से बदलें। घटक स्पष्ट रूप से useRequireAuth को कॉल करता है और लोड होने की स्थिति संभालता है। अब उसकी निर्भरता दिखाई देती है।
function MyPage() {
  const { user, loading } = useRequireAuth();
  if (loading) return <Spinner />;
  return <p>Hello, {user.name}</p>;
}

लाभों की तुलना

हुक वाला रूप: (1) DevTools में कोई अतिरिक्त आवरण नहीं, (2) स्पष्ट निर्भरता—घटक में `useRequireAuth` दिखाई देता है, (3) हुक का मॉक बनाकर परीक्षण किया जा सकता है, (4) उसी घटक में अन्य हुक्स के साथ संयोजित किया जा सकता है।

हुक वाले रूप का परीक्षण

अपने परीक्षण में useRequireAuth का मॉक बनाएँ और उसके मॉड्यूल एक्सपोर्ट को बदलें। घटक परीक्षण में केवल घटक को रेंडर करके आउटपुट पर दावा करना होगा—HOC सेटअप की आवश्यकता नहीं होगी।
vi.mock('./useRequireAuth', () => ({
  useRequireAuth: () => ({ user: mockUser, loading: false })
}));

render(<MyPage />);
expect(screen.getByText('Hello, Alice')).toBeInTheDocument();

HOC कब बनाए रखें

यदि आपको कई घटकों को घोषणात्मक रूप से सुरक्षित करना है, जैसे रूट परिभाषाओं में, और हर घटक में हुक कॉल नहीं जोड़ना चाहते, तो HOC बनाए रखें। आप हुक के ON TOP पर HOC भी बना सकते हैं।
function withAuth(Component) {
  return function (props) {
    const { user, loading } = useRequireAuth();
    if (loading) return <Spinner />;
    return <Component {...props} user={user} />;
  };
}

दोनों का सर्वोत्तम उपयोग

अंतिम संरचना: घटकों में सीधे उपयोग के लिए useRequireAuth हुक, AND घोषणात्मक रूट सुरक्षा के लिए उसके ऊपर बनाया गया एक पतला withAuth HOC। दोनों एक ही हुक तर्क साझा करते हैं।

त्वरित जाँच

किसी घटक को withAuth HOC से रैप करने के बजाय उसके भीतर useRequireAuth कॉल करने का मुख्य लाभ क्या है?

पुनरावलोकन

तर्क को कस्टम हुक में अलग करके, पुनर्निर्देशन जैसे पार्श्व प्रभावों को हुक में ले जाकर और घटक में हुक को सीधे कॉल करके HOC को हुक्स में पुनर्गठित करें। जब घोषणात्मक आवरण की आवश्यकता हो, तो हुक के ऊपर एक पतला HOC बनाएँ।

पाठ्यक्रम पूरा हुआ

बधाई हो! आपने **React पैटर्न: रेंडर प्रॉप्स और HOC** पूरा कर लिया है। अब आप दोनों पारंपरिक पैटर्न, उनके लाभ-हानि और उन्हें आधुनिक कस्टम हुक्स में पुनर्गठित करने का तरीका समझते हैं।
शुरुआत निःशुल्क

एआई शिक्षक के साथ React सीखें — निःशुल्क

अपने ब्राउज़र में वास्तविक कोड लिखें और चलाएँ, चौबीसों घंटे एआई शिक्षक से तुरंत सहायता पाएँ, और वेब या ऐप पर वहीं से शुरू करें जहाँ आपने छोड़ा था।

पाठ्यक्रम
88
पाठ
324

अक्सर पूछे जाने वाले प्रश्न

क्या “HOC को कस्टम हुक में रीफ़ैक्टर करना” पाठ निःशुल्क है?

हाँ—“HOC को कस्टम हुक में रीफ़ैक्टर करना” का पूरा पाठ यहाँ वेब पर निःशुल्क पढ़ा जा सकता है। इंटरैक्टिव अभ्यास (अंतर्निहित कोड संपादक और 24/7 एआई ट्यूटर) करने और React Academy पाठ्यक्रम का बाकी हिस्सा अनलॉक करने के लिए CoddyKit PRO लें। React Academy पाठ्यक्रम में कुल 4 पाठ शामिल हैं।

“HOC को कस्टम हुक में रीफ़ैक्टर करना” में मैं क्या सीखूँगा?

withAuth HOC को चरण-दर-चरण useAuth हुक में बदलें। आप ब्राउज़र में सीधे चलाए जाने वाले व्यावहारिक कोड के साथ React Academy का अभ्यास करते हैं, और पाठ पूरा करते समय 24/7 एआई ट्यूटर आपके प्रश्नों के उत्तर देता है।

क्या React Academy शुरू करने के लिए मुझे किसी अनुभव की आवश्यकता है?

पहले के अनुभव की आवश्यकता नहीं है। CoddyKit पर React Academy शुरुआती से लेकर उन्नत शिक्षार्थियों तक सभी के लिए व्यवस्थित किया गया है, इसलिए आप यहीं से या शुरुआत से सीखना शुरू कर सकते हैं और अपनी गति से आगे बढ़ सकते हैं। यह 4 में से 4वाँ पाठ है।

“HOC को कस्टम हुक में रीफ़ैक्टर करना” पाठ पूरा करने में कितना समय लगता है?

CoddyKit का अधिकांश पाठ लगभग 5–10 मिनट में पूरा हो जाता है। हर पाठ छोटा और संवादात्मक है, इसलिए आप लगातार प्रगति करते हैं और वेब या ऐप पर वहीं से सीखना जारी रख सकते हैं जहाँ आपने छोड़ा था।

क्या मैं इस React Academy पाठ में कोड लिख और चला सकता हूँ?

हाँ। हर React Academy पाठ में एक अंतर्निर्मित कोड संपादक शामिल है, जिससे आप सीधे अपने ब्राउज़र में वास्तविक कोड लिख और चला सकते हैं और तुरंत एआई प्रतिक्रिया पा सकते हैं—स्थानीय सेटअप की आवश्यकता नहीं है।

इस पाठ्यक्रम के सभी पाठ

  1. रेंडर प्रॉप्स पैटर्न
  2. हायर-ऑर्डर कंपोनेंट (HOC) की व्याख्या
  3. HOC बनाम रेंडर प्रॉप्स बनाम कस्टम हुक
  4. HOC को कस्टम हुक में रीफ़ैक्टर करना
← React Academy पर वापस जाएँ