Reactjs.org के अनुसार, भविष्य में ComponentsWillMount का समर्थन नहीं किया जाएगा।
https://reactjs.org/docs/react-component.html#unsafe_componentwillmount
कंपोनेंटविल का उपयोग करने की कोई आवश्यकता नहीं है।
यदि आप घटक को माउंट करने से पहले कुछ करना चाहते हैं, तो बस इसे कंस्ट्रक्टर () में करें।
यदि आप नेटवर्क अनुरोध करना चाहते हैं, तो इसे कंपोनेंटमाउंट में न करें। ऐसा इसलिए है क्योंकि ऐसा करने से अप्रत्याशित कीड़े हो जाएंगे।
नेटवर्क अनुरोध घटकडिमाउंट में किया जा सकता है।
आशा करता हूँ की ये काम करेगा।
08/03/2019 को अपडेट किया गया
घटक क्यों पूछते हैं इसका कारण यह है कि आप रेंडर करने से पहले राज्य को इनिशियलाइज़ करना चाहते हैं।
बस इसे useState में करें।
const helloWorld=()=>{
const [value,setValue]=useState(0) //initialize your state here
return <p>{value}</p>
}
export default helloWorld;
या हो सकता है कि आप एक घटक चलाना चाहते हैं जैसे किWillMount, उदाहरण के लिए, यदि आपका मूल कोड इस तरह दिखता है:
componentWillMount(){
console.log('componentWillMount')
}
हुक के साथ, आपको जीवन चक्र विधि को हटाने की जरूरत है:
const hookComponent=()=>{
console.log('componentWillMount')
return <p>you have transfered componeWillMount from class component into hook </p>
}
मैं केवल उपयोग के बारे में पहले उत्तर में कुछ जोड़ना चाहता हूं।
useEffect(()=>{})
यूज़फेक हर रेंडर पर चलता है, यह कंपोनेंटड्यूपडेट, कंपोनेंटडिमाउंट और कंपोनेंटविलीयूएनमाउंट का एक संयोजन है।
useEffect(()=>{},[])
यदि हम उपयोग में खाली सरणी जोड़ते हैं, तो यह घटक के माउंट होने पर ही चलता है। ऐसा इसलिए है क्योंकि useEffect आपके द्वारा पास किए गए सरणी की तुलना करेगा। तो यह एक खाली सरणी नहीं होना चाहिए। यह ऐसा सरणी हो सकता है जो बदल नहीं रहा है। उदाहरण के लिए, यह [1,2,3] या ['1,2'] हो सकता है। उपयोग अभी भी केवल तभी चलता है जब घटक आरोहित होता है।
यह आप पर निर्भर करता है कि आप चाहते हैं कि यह सिर्फ एक बार चले या हर रेंडर के बाद चले। यह खतरनाक नहीं है अगर आप एक सरणी जोड़ना भूल गए जब तक आप जानते हैं कि आप क्या कर रहे हैं।
मैंने हुक के लिए एक नमूना बनाया। कृपया यह देखें।
https://codesandbox.io/s/kw6xj153wr
21/08/2019 को अपडेट किया गया
उपरोक्त उत्तर लिखने के बाद से यह सफेद हो गया है। ऐसा कुछ है जो मुझे लगता है कि आपको ध्यान देने की आवश्यकता है। जब आप उपयोग करते हैं
useEffect(()=>{},[])
जब प्रतिक्रिया आपके द्वारा दिए गए मानों की सरणी से तुलना करती है [], तो यह तुलना करने के लिए Object.is () का उपयोग करता है। यदि आप किसी वस्तु को पास करते हैं, जैसे कि
useEffect(()=>{},[{name:'Tom'}])
यह बिल्कुल वैसा ही है:
useEffect(()=>{})
यह हर बार फिर से प्रस्तुत करेगा क्योंकि जब Object.is () एक वस्तु की तुलना करता है, तो वह अपने संदर्भ की तुलना करता है न कि मूल्य की। यह वैसा ही है जैसे {} === {} झूठे लौटते हैं क्योंकि उनके संदर्भ अलग हैं। यदि आप अभी भी ऑब्जेक्ट की तुलना संदर्भ से नहीं करना चाहते हैं, तो आप कुछ इस तरह कर सकते हैं:
useEffect(()=>{},[JSON.stringify({name:'Tom'})])