नोट मैंने यहाँ अधिक गहराई से उत्तर दिया है
रनटाइम रैपर:
यह सबसे मुहावरेदार तरीका है।
const Wrapper = ({children}) => (
<div>
<div>header</div>
<div>{children}</div>
<div>footer</div>
</div>
);
const App = () => <div>Hello</div>;
const WrappedApp = () => (
<Wrapper>
<App/>
</Wrapper>
);
ध्यान दें कि children
रिएक्ट में एक "विशेष प्रोप" है, और ऊपर का उदाहरण वाक्यगत शर्करा है और (लगभग) के बराबर है<Wrapper children={<App/>}/>
प्रारंभिक आवरण / एचओसी
आप एक उच्च आदेश घटक (HOC) का उपयोग कर सकते हैं । उन्हें हाल ही में आधिकारिक डॉक्टर में जोड़ा गया है ।
// Signature may look fancy but it's just
// a function that takes a component and returns a new component
const wrapHOC = (WrappedComponent) => (props) => (
<div>
<div>header</div>
<div><WrappedComponent {...props}/></div>
<div>footer</div>
</div>
)
const App = () => <div>Hello</div>;
const WrappedApp = wrapHOC(App);
यह (थोड़ा) बेहतर प्रदर्शन का कारण बन सकता है क्योंकि आवरण घटक शॉर्ट-सर्किट प्रदान कर सकता है जो कि एक कदम आगे बढ़ते हुए shouldComponentUpdate के साथ होना चाहिए, जबकि एक रनरअप रैपर के मामले में, बच्चों का प्रोप हमेशा एक अलग पुनर्संरचना होने और पुन: रेंडर करने का कारण बनता है। यहां तक कि अगर आपके घटक PureComponent का विस्तार करते हैं।
ध्यान दें कि connect
Redux एक रनवे रैपर हुआ करता था लेकिन उसे HOC में बदल दिया गया था क्योंकि यदि आप pure
विकल्प का उपयोग करते हैं (जो डिफ़ॉल्ट रूप से सही है) तो यह बेकार री-रेंडरर्स से बचने की अनुमति देता है
रेंडर चरण के दौरान आपको कभी भी एचओसी को कॉल नहीं करना चाहिए क्योंकि रिएक्ट घटक बनाना महंगा हो सकता है। बल्कि आपको इन रैपरों को इनिशियलाइज़ेशन पर कॉल करना चाहिए।
ध्यान दें कि ऊपर जैसे कार्यात्मक घटकों का उपयोग करते समय, HOC संस्करण कोई उपयोगी अनुकूलन प्रदान नहीं करता है, क्योंकि स्टेटलेस कार्यात्मक घटक लागू नहीं होते हैं shouldComponentUpdate
अधिक स्पष्टीकरण यहाँ: https://stackoverflow.com/a/31564812/82609
this.props.children
घटक API का हिस्सा है और इस तरह से उपयोग किए जाने की उम्मीद है। रिएक्ट टीम के उदाहरण इस तकनीक का उपयोग करते हैं, जैसे कि प्रॉप्स को स्थानांतरित करने और जब एक एकल बच्चे के बारे में बात करते हैं ।