संपादित करें: इसकी शुरूआत के साथ Hooks
कार्यात्मक घटकों में एक जीवनचक्र तरह के व्यवहार के साथ-साथ राज्य को लागू करना संभव है। वर्तमान में
हुक एक नई सुविधा का प्रस्ताव है जो आपको कक्षा लिखे बिना राज्य और अन्य प्रतिक्रिया सुविधाओं का उपयोग करने देता है। वे प्रतिक्रिया में v16.8.0 के एक भाग के रूप में जारी किए जाते हैं
useEffect
हुक का उपयोग जीवनचक्र व्यवहार को दोहराने के लिए किया जा सकता है, और useState
इसका उपयोग फ़ंक्शन घटक में स्थिति को संग्रहीत करने के लिए किया जा सकता है।
मूल सिंटैक्स:
useEffect(callbackFunction, [dependentProps]) => cleanupFunction
आप अपने उपयोग के मामले को हुक की तरह लागू कर सकते हैं
const grid = (props) => {
console.log(props);
let {skuRules} = props;
useEffect(() => {
if(!props.fetched) {
props.fetchRules();
}
console.log('mount it!');
}, []); // passing an empty array as second argument triggers the callback in useEffect only after the initial render thus replicating `componentDidMount` lifecycle behaviour
return(
<Content title="Promotions" breadcrumbs={breadcrumbs} fetched={skuRules.fetched}>
<Box title="Sku Promotion">
<ActionButtons buttons={actionButtons} />
<SkuRuleGrid
data={skuRules.payload}
fetch={props.fetchSkuRules}
/>
</Box>
</Content>
)
}
useEffect
एक फ़ंक्शन को भी लौटा सकता है जो घटक के अनमाउंट होने पर चलाया जाएगा। इसका उपयोग श्रोताओं को अनसब्सक्राइब करने के लिए किया जा सकता है componentWillUnmount
:
जैसे: कंपोनेंटविल यूमाउंट
useEffect(() => {
window.addEventListener('unhandledRejection', handler);
return () => {
window.removeEventListener('unhandledRejection', handler);
}
}, [])
useEffect
विशिष्ट घटनाओं पर सशर्त बनाने के लिए , आप इसे परिवर्तनों की जांच करने के लिए मूल्यों की एक सरणी प्रदान कर सकते हैं:
जैसे: कंपोनेंटड्यूपडेट
componentDidUpdate(prevProps, prevState) {
const { counter } = this.props;
if (this.props.counter !== prevState.counter) {
// some action here
}
}
हुक बराबर
useEffect(() => {
// action here
}, [props.counter]); // checks for changes in the values in this array
यदि आप इस सरणी को शामिल करते हैं, तो समय के साथ बदलने वाले घटक स्कोप से सभी मानों को शामिल करना सुनिश्चित करें (प्रॉप्स, स्टेट), या आप पिछले रेंडरर्स से संदर्भित मानों को समाप्त कर सकते हैं।
उपयोग करने के लिए कुछ सूक्ष्मताएं हैं useEffect
; एपीआई की जाँच करें Here
।
V16.7.0 से पहले
फ़ंक्शन घटकों की संपत्ति यह है कि उनके पास रीसायकल जीवन चक्र फ़ंक्शन या this
कीवर्ड तक पहुंच नहीं है । React.Component
यदि आप जीवनचक्र फ़ंक्शन का उपयोग करना चाहते हैं तो आपको कक्षा का विस्तार करने की आवश्यकता है ।
class Grid extends React.Component {
constructor(props) {
super(props)
}
componentDidMount () {
if(!this.props.fetched) {
this.props.fetchRules();
}
console.log('mount it!');
}
render() {
return(
<Content title="Promotions" breadcrumbs={breadcrumbs} fetched={skuRules.fetched}>
<Box title="Sku Promotion">
<ActionButtons buttons={actionButtons} />
<SkuRuleGrid
data={skuRules.payload}
fetch={props.fetchSkuRules}
/>
</Box>
</Content>
)
}
}
जब आप केवल अतिरिक्त तर्क की आवश्यकता के बिना अपने घटक को प्रस्तुत करना चाहते हैं तो फ़ंक्शन घटक उपयोगी होते हैं।