परिस्थितियां दो प्रकार की होती हैं: माउंट और अपडेट, इसलिए यूज़मेमो के दो कार्यान्वयन हैं: माउंटमेमो और अपडेटमेमो।
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 में सहेजें।
हुक ऑब्जेक्ट बनाने के लिए mountWorkInProgressHook का उपयोग करें।
अगले डिपो में डिपो सहेजें।
नेक्स्टवैल्यू पाने के लिए नेक्स्टक्रिएट() को कॉल करें। यदि देव परिवेश में हैं, तो दो बार कॉल करें।
अगला वैल्यू और नेक्स्टडेप्स को हुक.मेमोइज्डस्टेट में सेव करें और नेक्स्टवैल्यू लौटाएं।
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; }
स्पष्टीकरण:
अपडेट चरण में, रिएक्ट यह तय करेगा कि डिप्स बदल गए हैं या नहीं, यदि बदला गया है, तो रिएक्ट नया मान प्राप्त करने और वापस आने के लिए कॉलबैक चलाएगा। यदि नहीं बदला गया, तो रिएक्ट पुराना मान लौटा देगा।
अस्वीकरण: उपलब्ध कराए गए सभी संसाधन आंशिक रूप से इंटरनेट से हैं। यदि आपके कॉपीराइट या अन्य अधिकारों और हितों का कोई उल्लंघन होता है, तो कृपया विस्तृत कारण बताएं और कॉपीराइट या अधिकारों और हितों का प्रमाण प्रदान करें और फिर इसे ईमेल पर भेजें: [email protected] हम इसे आपके लिए यथाशीघ्र संभालेंगे।
Copyright© 2022 湘ICP备2022001581号-3