"यदि कोई कर्मचारी अपना काम अच्छी तरह से करना चाहता है, तो उसे पहले अपने औजारों को तेज करना होगा।" - कन्फ्यूशियस, "द एनालेक्ट्स ऑफ कन्फ्यूशियस। लू लिंगगोंग"
मुखपृष्ठ > प्रोग्रामिंग > यूज़मेमो का स्रोत कोड:

यूज़मेमो का स्रोत कोड:

2024-11-08 को प्रकाशित
ब्राउज़ करें:562

The source code of useMemo:

परिस्थितियां दो प्रकार की होती हैं: माउंट और अपडेट, इसलिए यूज़मेमो के दो कार्यान्वयन हैं: माउंटमेमो और अपडेटमेमो

  • mountMemo का स्रोत कोड:

function mountMemo(
  nextCreate: () => T,
  deps: Array | void | null,
): T {
  const hook = mountWorkInProgressHook();
  const nextDeps = deps === undefined ? null : deps;
  const nextValue = nextCreate();
  if (shouldDoubleInvokeUserFnsInHooksDEV) {
    setIsStrictModeForDevtools(true);
    nextCreate();
    setIsStrictModeForDevtools(false);
  }
  hook.memoizedState = [nextValue, nextDeps];
  return nextValue;
}


स्पष्टीकरण:
माउंट चरण में, यूज़मेमो फ़ंक्शन मान की गणना करने और वापस करने के लिए कॉलबैक फ़ंक्शन को कॉल करता है। मूल्य और डिप्स कोhook.memoizedState में सहेजें।

  1. हुक ऑब्जेक्ट बनाने के लिए mountWorkInProgressHook का उपयोग करें।

  2. अगले डिपो में डिपो सहेजें।

  3. नेक्स्टवैल्यू पाने के लिए नेक्स्टक्रिएट() को कॉल करें। यदि देव परिवेश में हैं, तो दो बार कॉल करें।

  4. अगला वैल्यू और नेक्स्टडेप्स को हुक.मेमोइज्डस्टेट में सेव करें और नेक्स्टवैल्यू लौटाएं।

  • updateMemo का स्रोत कोड:

function updateMemo(
  nextCreate: () => T,
  deps: Array | void | null,
): T {
  const hook = updateWorkInProgressHook();
  const nextDeps = deps === undefined ? null : deps;
  const prevState = hook.memoizedState;
  // Assume these are defined. If they're not, areHookInputsEqual will warn.
  if (nextDeps !== null) {
    const prevDeps: Array | null = prevState[1];
    if (areHookInputsEqual(nextDeps, prevDeps)) {
      return prevState[0];
    }
  }
  const nextValue = nextCreate();
  if (shouldDoubleInvokeUserFnsInHooksDEV) {
    setIsStrictModeForDevtools(true);
    nextCreate();
    setIsStrictModeForDevtools(false);
  }
  hook.memoizedState = [nextValue, nextDeps];
  return nextValue;
}


स्पष्टीकरण:
अपडेट चरण में, रिएक्ट यह तय करेगा कि डिप्स बदल गए हैं या नहीं, यदि बदला गया है, तो रिएक्ट नया मान प्राप्त करने और वापस आने के लिए कॉलबैक चलाएगा। यदि नहीं बदला गया, तो रिएक्ट पुराना मान लौटा देगा।

  1. एक नया हुक ऑब्जेक्ट प्राप्त करें: हुक = updateWorkInProgressHook();
  2. यदि डिप्स सरणी खाली है यदि (नेक्स्टडिप्स !== नल), प्रत्येक रेंडर पर कॉलबैक फ़ंक्शन को कॉल करें और नया मान लौटाएं।
  3. यदि डिप्स ऐरे खाली नहीं है, तो निर्णय करें कि डिप्स बदल गए हैं या नहीं यदि (areHookInputsEqual(nextDeps, prevDeps))। यदि नहीं बदला गया है, तो पुराना मान लौटाएँ prevState[0];.
विज्ञप्ति वक्तव्य इस लेख को पुन: प्रस्तुत किया गया है: https://dev.to/clara1123/the-source-code-of-usememo-5akk?1 यदि कोई उल्लंघन है, तो कृपया इसे हटाने के लिए [email protected] से संपर्क करें।
नवीनतम ट्यूटोरियल अधिक>

चीनी भाषा का अध्ययन करें

अस्वीकरण: उपलब्ध कराए गए सभी संसाधन आंशिक रूप से इंटरनेट से हैं। यदि आपके कॉपीराइट या अन्य अधिकारों और हितों का कोई उल्लंघन होता है, तो कृपया विस्तृत कारण बताएं और कॉपीराइट या अधिकारों और हितों का प्रमाण प्रदान करें और फिर इसे ईमेल पर भेजें: [email protected] हम इसे आपके लिए यथाशीघ्र संभालेंगे।

Copyright© 2022 湘ICP备2022001581号-3