यदि आप ऐसा केवल इसलिए कर रहे हैं क्योंकि आप चाहते हैं कि बच्चा अपने माता-पिता को पुन: प्रयोज्य विशेषता प्रदान करे, तो आप ऐसा करने पर विचार कर सकते हैं कि इसके बजाय रेंडर-प्रॉप्स का उपयोग किया जाए।
वह तकनीक वास्तव में संरचना को उल्टा कर देती है। Child
अब, माता पिता लपेटता तो मैं यह करने के लिए नया नाम दिया है AlertTrait
नीचे। मैंने Parent
निरंतरता के लिए नाम रखा , हालांकि यह वास्तव में अब माता-पिता नहीं है।
// Use it like this:
<AlertTrait renderComponent={Parent}/>
class AlertTrait extends Component {
// You may need to bind this function, if it is stateful
doAlert() {
alert('clicked');
}
render() {
return this.props.renderComponent(this.doAlert);
}
}
class Parent extends Component {
render() {
return (
<button onClick={this.props.doAlert}>Click</button>
);
}
}
इस मामले में, AlertTrait एक या एक से अधिक लक्षण प्रदान करता है, जो इसे उसके renderComponent
प्रस्ताव में दिए गए घटक के रूप में सहारा के रूप में गुजरता है ।
जनक doAlert
एक प्रस्ताव के रूप में प्राप्त करता है , और जरूरत पड़ने पर इसे कॉल कर सकता है।
(स्पष्टता के लिए, मैंने renderComponent
उपर्युक्त उदाहरण में प्रोप को बुलाया । लेकिन ऊपर दिए गए रिएक्ट डॉक्स में, वे इसे कहते हैं render
।)
Trait घटक अपने रेंडर फंक्शन में पेरेंट के आसपास के सामान को रेंडर कर सकता है, लेकिन यह पेरेंट के अंदर कुछ भी रेंडर नहीं करता है। वास्तव में यह माता-पिता के अंदर चीजों को प्रस्तुत कर सकता है, अगर यह माता-पिता के लिए एक और प्रस्ताव (जैसे renderChild
) पारित करता है, जिसे माता-पिता तब अपनी रेंडर विधि के दौरान उपयोग कर सकते हैं।
यह कुछ हद तक अलग है जो ओपी ने पूछा था, लेकिन कुछ लोग यहां समाप्त हो सकते हैं (जैसे हमने किया) क्योंकि वे एक पुन: प्रयोज्य लक्षण बनाना चाहते थे, और उन्होंने सोचा कि एक बच्चा घटक ऐसा करने का एक अच्छा तरीका था।