पहली बात यह ध्यान देने की है कि स्टेटलेस फंक्शनल कंपोनेंट में तरीके नहीं हो सकते हैं, आपको एक स्टेटलेस फंक्शनल कंपोनेंट होने पर कॉलिंग updateया drawरेंडर पर भरोसा नहीं करना चाहिए Ball।
ज्यादातर मामलों में आपको घटक फ़ंक्शन के बाहर के कार्यों की घोषणा करनी चाहिए ताकि आप उन्हें केवल एक बार घोषित करें और हमेशा एक ही संदर्भ का उपयोग करें। जब आप फ़ंक्शन को अंदर घोषित करते हैं, तो हर बार घटक प्रदान किए जाने पर फ़ंक्शन को फिर से परिभाषित किया जाएगा।
ऐसे मामले हैं जिनमें आपको घटक के अंदर एक फ़ंक्शन को परिभाषित करने की आवश्यकता होगी, उदाहरण के लिए, इसे एक इवेंट हैंडलर के रूप में असाइन करें जो घटक के गुणों के आधार पर भिन्न व्यवहार करता है। लेकिन फिर भी आप फ़ंक्शन को बाहर से परिभाषित कर सकते हैं Ballऔर इसे गुणों के साथ बाँध सकते हैं, जिससे कोड बहुत अधिक क्लीनर बन जाएगा updateया फिर से drawपुन: प्रयोज्य हो सकता है।
const update (propX, a, b) => { ... };
const Ball = props => (
<Something onClick={update.bind(null, props.x)} />
);
यदि आप हुक का उपयोग कर रहे हैं , तो आप useCallbackयह सुनिश्चित करने के लिए उपयोग कर सकते हैं कि फ़ंक्शन केवल तब ही पुनर्परिभाषित हो जब इसकी निर्भरता ( props.xइस मामले में) परिवर्तन में से एक:
const Ball = props => {
const onClick = useCallback((a, b) => {
}, [props.x]);
return (
<Something onClick={onClick} />
);
}
यह गलत तरीका है :
const Ball = props => {
function update(a, b) {
}
return (
<Something onClick={update} />
);
}
उपयोग करते समय useCallback, हुक updateमें फ़ंक्शन को परिभाषित करने से useCallbackहमारे घटक के बाहर कुछ भी अधिक से अधिक एक डिजाइन निर्णय बन जाता है, आपको इस बात पर ध्यान देना चाहिए कि क्या आप पुन: उपयोग करने जा रहे हैं updateऔर / या यदि आपको घटक के बंद होने के दायरे तक पहुंचने की आवश्यकता है, तो उदाहरण के लिए, राज्य को पढ़ें / लिखें। व्यक्तिगत रूप से मैं इसे डिफ़ॉल्ट रूप से घटक के अंदर परिभाषित करना चुनता हूं और आवश्यकता होने पर इसे पुन: प्रयोज्य बनाता हूं, ताकि शुरुआत से अधिक इंजीनियरिंग को रोका जा सके। उस पुन: उपयोग के शीर्ष पर तर्क को अधिक विशिष्ट हुक के साथ बेहतर तरीके से किया जाता है, जिससे घटकों को प्रस्तुतिकरण उद्देश्यों के लिए छोड़ दिया जाता है। हुक का उपयोग करते समय घटक के बाहर फ़ंक्शन को परिभाषित करना वास्तव में रिएक्ट से डिकॉउलिंग के ग्रेड पर निर्भर करता है जिसे आप अपने आवेदन तर्क के लिए चाहते हैं।