2016-03-11 4 views
5

अगर मैं निम्न HTML है:क्या मैं ReactJS में मूल तत्व के बच्चों को स्थानांतरित कर सकता हूं?

<div id="myreactcomponent"> 
    <h1>Headline</h1> 
    <p>Content</p> 
</div> 

और मैं #myreactcomponent div में एक ReactJS घटक को प्रारंभ, मैं किसी भी तरह h1 और घटक के अंदर पी तत्व प्रदान कर सकते हैं? कुछ ऐसा:

return (
    <Header></Header> 
    { place h1 and p here } 
    <Footer></Footer> 
); 

क्या इसके लिए ReactJS में कोई विकल्प है?

आप मेरी समस्या का प्रदर्शन देखने के लिए यह JSFiddle देख सकते हैं। मैं transclude विकल्प और प्रतिक्रिया में एक AngularJS निर्देश का <ng-transclude/> टैग खोज:

कोणीय से परिचित लोगों के लिए

पॉलिमर से परिचित लोगों के लिए: मैं प्रतिक्रिया में <content/> टैग के बराबर खोज करते हैं।

अद्यतन

मैं this.props.children संपत्ति कोशिश की, लेकिन जहाँ तक मैं समझता हूँ, यह केवल यदि प्रारंभिक एचटीएमएल एक प्रतिक्रिया घटक में पहले से ही है काम करता है। मुझे वास्तव में उस तत्व के बच्चों को प्रस्तुत करने की आवश्यकता है जिसे मैंने प्रारंभ में पहले संदर्भ घटक प्रस्तुत किया था।

अद्यतन 2

घटक (के रूप में update of the JSFiddle में दिखाया गया है) के प्रारंभ में HTML ले जाने के लिए नहीं मेरे मामले में एक विकल्प, विभिन्न प्रणालियों जो प्रारंभिक एचटीएमएल प्रस्तुत करना और घटकों प्रतिक्रिया की वजह से है ।

+0

क्या आपने कुछ भी कोशिश की ..? –

+0

@MoidMohd मैंने 'this.props.children' की कोशिश की जो कुछ समान है लेकिन केवल तभी आप एक घटक के अंदर हैं। मैंने इसे बेहतर तरीके से समझाने के लिए जेएसएफडल के साथ अपना प्रश्न अपडेट किया। धन्यवाद। –

+0

क्या आपके पास कुछ जेएसएक्स सामग्री है जो आपके जेएसएक्स में "डाली गई" है? आपके कोड के अंदर एचटीएमएल की एक स्ट्रिंग की तरह कुछ ...? –

उत्तर

3

कुछ इस तरह .. ।

.. 
render(){ 
return (
<Header></Header> 
<span dangerouslySetInnerHTML={{__html:'content'}}></span> 
<Footer></Footer> 
) 
} 
.. 
var content = '<h1>This is a header</h1><p>This is some para..</p>' 

यह है कि क्या आप बात कर रहे हैं ... आप इस here बारे में पढ़ सकते है।

+0

यदि इसके लिए कोणीय या पॉलिमर की तरह कोई "साफ" तरीका नहीं है, तो हाँ ऐसा लगता है कि मुझे क्या चाहिए। केवल सवाल ही होगा, मैं एचटीएमएल को खतरनाक रूप से डालने के लिए "साफ" कैसे प्राप्त करूं (क्योंकि यह अभी भी मूल HTML में प्रस्तुत किया गया है)? क्या मुझे आईडी द्वारा तत्व प्राप्त होगा या तो इसे मूल पृष्ठ से बाहर कर दें और इसे घटक में डालें? –

+1

आप getElementById द्वारा इसे कर सकते हैं ... या डेटा के साथ मॉड्यूल बना सकते हैं और फिर इसे अपनी जेएसएक्स फ़ाइल में आयात कर सकते हैं। –

+0

मैं इसे सही मानता हूं क्योंकि ऐसा लगता है कि कोई "साफ" समाधान नहीं है। शायद आप अपने समाधान में @ user3338229 का jsfiddle भी जोड़ सकते हैं? https://jsfiddle.net/6hshvsco/5/ –

2

हां, यह this.props.children का उपयोग करने के लिए।

उदाहरण के लिए

, आप एक प्रतिक्रिया घटक इस तरह इस्तेमाल किया था, तो:

<MyReactComponent> 
    <h1>Headline</h1> 
    <p>Content</p> 
</MyReactComponent> 

आप बच्चे तत्वों हस्तांतरण कर सकते हैं h1 और p, MyReactComponent की render में ऐसा करने से:

return (
    <Header></Header> 
    { this.props.children } 
    <Footer></Footer> 
); 
+0

this.props.children केवल HTML * अंदर * घटक के लिए काम करता है। मैंने इसे और अधिक स्पष्ट करने के लिए एक JSFiddle के साथ अपना प्रश्न अपडेट किया। माफ़ कीजिये। –

2

हाँ यह संभव है।

प्रतिक्रिया वर्ग में आप this.props.children

माता पिता घटक में

तो है:

function render() { 
    return <MyComponent><div class="my-child">My text</div></MyComponent>; 
} 

तो बच्चे घटक में

function render() { 
    return <div class="child-wrapper">{this.props.children}</div>; 
} 

https://facebook.github.io/react/tips/children-props-type.html

+0

this.props.children केवल HTML * अंदर * घटक के लिए काम करता है। मैंने इसे और अधिक स्पष्ट करने के लिए एक JSFiddle के साथ अपना प्रश्न अपडेट किया। माफ़ कीजिये। –

+0

अपडेटेडः https://jsfiddle.net/6hshvsco/3/ – user3338229

+0

यह दुर्भाग्य से नहीं है कि मैं क्या चाहता हूं। मुझे प्रारंभिक एचटीएमएल में एचटीएमएल को स्थानांतरित करने की आवश्यकता है जिस पर मैं प्रारंभ करता हूं (उस प्रणाली में आर्किटेक्चर की वजह से, यह एचटीएमएल किसी अन्य सिस्टम से आता है, और केवल वह सिस्टम एचटीएमएल को बच्चों के रूप में प्रस्तुत करने के बारे में जानता है। प्रतिक्रिया घटकों को शुरू करने वाली प्रणाली ' टी अब और एचटीएमएल को नहीं जानता।) –

संबंधित मुद्दे

 संबंधित मुद्दे