एक कंटेनर होना चाहिए जो सभी घटकों को घटक नामों को मैप करता है जिन्हें गतिशील रूप से उपयोग किया जाना चाहिए। घटक वर्गों को एक कंटेनर में पंजीकृत किया जाना चाहिए क्योंकि मॉड्यूलर वातावरण में अन्यथा कोई एकल स्थान नहीं है जहां उन्हें एक्सेस किया जा सकता है। घटक वर्गों को उनके नामों के बिना उन्हें स्पष्ट रूप से निर्दिष्ट किए बिना पहचाना नहीं जा सकता क्योंकि name
उत्पादन में फ़ंक्शन को छोटा किया जाता है।
घटक का नक्शा
यह सादा वस्तु हो सकती है:
class Foo extends React.Component { ... }
...
const componentsMap = { Foo, Bar };
...
const componentName = 'Fo' + 'o';
const DynamicComponent = componentsMap[componentName];
<DynamicComponent/>;
या Map
उदाहरण:
const componentsMap = new Map([[Foo, Foo], [Bar, Bar]]);
...
const DynamicComponent = componentsMap.get(componentName);
सादा वस्तु अधिक उपयुक्त है क्योंकि यह संपत्ति आशुलिपि से लाभान्वित करती है।
बैरल मॉड्यूल
नाम निर्यात के साथ एक बैरल मॉड्यूल इस तरह के नक्शे के रूप में कार्य कर सकता है:
// Foo.js
export class Foo extends React.Component { ... }
// dynamic-components.js
export * from './Foo';
export * from './Bar';
// some module that uses dynamic component
import * as componentsMap from './dynamic-components';
const componentName = 'Fo' + 'o';
const DynamicComponent = componentsMap[componentName];
<DynamicComponent/>;
यह मॉड्यूल कोड शैली के प्रति एक वर्ग के साथ अच्छी तरह से काम करता है।
डेकोरेटर
डेकोरेटर का उपयोग वाक्य रचना चीनी के लिए वर्ग घटकों के साथ किया जा सकता है, इसके लिए अभी भी कक्षा के नाम स्पष्ट रूप से निर्दिष्ट करने और उन्हें एक मानचित्र में दर्ज करने की आवश्यकता है:
const componentsMap = {};
function dynamic(Component) {
if (!Component.displayName)
throw new Error('no name');
componentsMap[Component.displayName] = Component;
return Component;
}
...
@dynamic
class Foo extends React.Component {
static displayName = 'Foo'
...
}
एक डेकोरेटर को कार्यात्मक घटकों के साथ उच्च-क्रम घटक के रूप में इस्तेमाल किया जा सकता है:
const Bar = props => ...;
Bar.displayName = 'Bar';
export default dynamic(Bar);
यादृच्छिक संपत्ति के बजाय गैर-मानकdisplayName
का उपयोग भी डीबगिंग को लाभ देता है।
{...this.props}
माता-पिता से उप-घटकों को पारदर्शी रूप से पास करने के लिए उपयोगी मिलेगा । जैसेreturn <MyComponent {...this.props} />