क्या मुझे घटक में एक या कई उपयोग करना चाहिए?


116

मुझे लागू करने के लिए कुछ दुष्प्रभाव हैं और उन्हें व्यवस्थित करने के तरीके जानना चाहते हैं:

  • एक एकल उपयोग के रूप में
  • या कई उपयोग

प्रदर्शन और वास्तुकला के मामले में बेहतर क्या है?

जवाबों:


176

जिस पैटर्न का आपको पालन करने की आवश्यकता है, वह आपके उपयोग के आधार पर निर्भर करता है।

सबसे पहले , आपके पास एक ऐसी स्थिति हो सकती है जहां आपको प्रारंभिक माउंट के दौरान इवेंट श्रोता को जोड़ने और उन्हें अनमाउंट पर साफ करने की आवश्यकता होती है और एक अन्य मामला जहां एक विशेष श्रोता को साफ करने की आवश्यकता होती है और एक प्रोप परिवर्तन पर फिर से जोड़ा जाता है। ऐसे मामले में, दो अलग-अलग उपयोगों का उपयोग करना बेहतर होता है ताकि संबंधित तर्क को एक साथ रखने के साथ-साथ प्रदर्शन लाभ भी हो

useEffect(() => {
   // adding event listeners on mount here
   return () => {
       // cleaning up the listeners here
   }
}, []);

useEffect(() => {
   // adding listeners everytime props.x changes
   return () => {
       // removing the listener when props.x changes
   }
}, [props.x])

दूसरा: एक ऐसा मामला हो सकता है, जब आपको किसी सेट या किसी प्रॉप के बीच परिवर्तन होने पर एपीआई कॉल या किसी अन्य साइड-इफ़ेक्ट को ट्रिगर करने की आवश्यकता होती है। ऐसे मामले में useEffectनिगरानी के लिए प्रासंगिक मूल्यों के साथ एक अच्छा विचार होना चाहिए

useEffect(() => {
    // side effect here on change of any of props.x or stateY
}, [props.x, stateY])

तीसरा: एक तीसरा मामला जब आपको विभिन्न मूल्यों के परिवर्तन पर अलग-अलग कार्रवाई करने की आवश्यकता होती है। ऐसे मामले में, अलग-अलग प्रासंगिक तुलनाओं को अलग-अलग करेंuseEffects

useEffect(() => {
   // some side-effect on change of props.x
}, [props.x])

useEffect(() => {
   // another side-effect on change of stateX or stateY 
}, [stateX, stateY])

1
के बीच एक मध्य जमीन के बारे में क्या दूसरा और तीसरा ऊपर ?: उदाहरण आप तर्क है कि रन जब राज्य / रंगमंच की सामग्री परिवर्तन का एक सबसेट है, लेकिन प्रत्येक अलग तर्क है कि जरूरतों कि जरूरतों को चलाने के लिए कुछ सामान्य कोड के अलावा चलाने के लिए? आप उपयोग नहीं करेंगे [](क्योंकि यह अभी भी केवल राज्य / प्रॉप्स का एक सबसेट है जिसके लिए आप परिवर्तनों का इंतजार कर रहे हैं) लेकिन आप कोड का पुन: उपयोग भी करना चाहेंगे। क्या आप अलग-अलग उपयोग करते हैं useEffectsऔर साझा कोड को एक फ़ंक्शन में रखते हैं जिसे वे प्रत्येक अलग-अलग कॉल करते हैं?
इको

2
जैसा कि नीचे दिए गए सुझाव से पता चलता है, रिएक्ट टीम सुझाव देती है कि हुक को चिंता से अलग किया जाए, इसलिए आप इसे कई useEffectकॉल में विभाजित करेंगे ।
hakazvaka

33
मुझे पसंद है कि आपने कैसे useCase लिखा है।
VerticalGrain

क्या उनकी परिभाषा के क्रम में उन्हें हमेशा ट्रिगर किया जाता है? अर्थात् effect1 हमेशा पहले कहा जाता है, तो प्रभाव 2?
कॉम्प्यूट्रियस

1
@computrius हाँ ,React will apply every effect used by the component, in the order they were specified.
अगस्त

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.