साफ़ किया एचटीएमएल अवयव कि सर्वर और ग्राहक पर दोनों एचटीएमएल स्ट्रिंग को पार्स और तत्वों प्रतिक्रिया में जिसके परिणामस्वरूप नोड्स बदलने से चलाया जा सकता है प्रतिक्रिया में बदल सकता है।
const React = require('react');
const ReactDOMServer = require('react-dom/server');
const str = `<div>divContent<p> para 1</p><p> para 2</p><gallery image-ids="" /><player video-id="" /><p> para 3</p><gallery image-ids="[1, 3]"/></div>`;
var parse = require('xml-parser');
const Gallery =() => React.createElement('div', null, 'Gallery comp');
const Player =() => React.createElement('div', null, 'Player comp');
const componentMap = {
gallery: Gallery,
player: Player
};
const traverse = (cur, props) => {
return React.createElement(
componentMap[cur.name] || cur.name,
props,
cur.children.length === 0 ? cur.content: Array.prototype.map.call(cur.children, (c, i) => traverse(c, { key: i }))
);
};
const domTree = parse(str).root;
const App = traverse(
domTree
);
console.log(
ReactDOMServer.renderToString(
App
)
);
नोट तथापि, यह JSX/TSX कि तुम सच में, जरूरत के रूप में आप का उल्लेख नहीं है, लेकिन के लिए एक पेड़ (इस मामले में ReactDOM) प्रतिक्रिया रेंडरर के लिए नोड्स प्रतिक्रिया। जेएसएक्स सिर्फ सिंटैक्टिक चीनी है, और इसे आगे और पीछे बदलना अनावश्यक है जब तक कि आप अपने कोडबेस में प्रतिक्रिया आउटपुट को बनाए रखना नहीं चाहते हैं।
अधिक सरलीकृत एचटीएमएल पार्सिंग क्षमा करें। यह केवल चित्रकारी उद्देश्यों के लिए है। इनपुट इनपुट एचटीएमएल या आपके उपयोग के मामले में फिट बैठने के लिए आप एक और स्पेक-अनुपालन लाइब्रेरी का उपयोग करना चाह सकते हैं।
सुनिश्चित करें कि क्लाइंट साइड बंडल ठीक उसी App
घटक प्राप्त करें, अन्यथा आप प्रतिक्रिया कर सकते हैं क्लाइंट साइड स्क्रिप्ट डीओएम पेड़ को फिर से बनायेगी और आप सर्वर साइड प्रतिपादन के सभी लाभ खो देंगे।
आप ऊपर दिए गए दृष्टिकोण के साथ प्रतिक्रिया 16 की स्ट्रीमिंग का भी लाभ उठा सकते हैं।
(बिल्कुल आपके उपयोग के मामले पर सावधानी से विचार पर) रंगमंच की सामग्री समस्या
प्रॉप्स विशेषताओं के रूप में पेड़ से आप के लिए उपलब्ध हो जाएगा और रंगमंच की सामग्री के रूप में पारित किया जा सकता को संबोधित करते। हालांकि
const React = require('react');
const ReactDOMServer = require('react-dom/server');
const str = `<div>divContent<p> para 1</p><p> para 2</p><gallery image-ids="" /><player video-id="" /><p> para 3</p><gallery image-ids="[1, 3]"/></div>`;
var parse = require('xml-parser');
const Gallery = props => React.createElement('div', null, `Gallery comp: Props ${JSON.stringify(props)}`);
const Player =() => React.createElement('div', null, 'Player comp');
const componentMap = {
gallery: Gallery,
player: Player
};
const attrsToProps = attributes => {
return Object.keys(attributes).reduce((acc, k) => {
let val;
try {
val = JSON.parse(attributes[k])
} catch(e) {
val = null;
}
return Object.assign(
{},
acc,
{ [ k.replace(/\-/g, '') ]: val }
);
}, {});
};
const traverse = (cur, props) => {
const propsFromAttrs = attrsToProps(cur.attributes);
const childrenNodes = Array.prototype.map.call(cur.children, (c, i) => {
return traverse(
c,
Object.assign(
{},
{
key: i
}
)
);
});
return React.createElement(
componentMap[cur.name] || cur.name,
Object.assign(
{},
props,
propsFromAttrs
),
cur.children.length === 0 ? cur.content: childrenNodes
);
};
const domTree = parse(str).root;
const App = traverse(
domTree
);
console.log(
ReactDOMServer.renderToString(
App
)
);
कस्टम के साथ सावधानी से जिम्मेदार बताते हैं - आप this rfc पालन करने के लिए चाहते हो सकता है। यदि संभव हो तो ऊंट के साथ चिपकाएं।
ऐसा लगता है कि आप एक प्रतिक्रिया घटक में ' ' जैसे तारों को चालू करने के लिए कह रहे हैं - बहुत उचित नहीं लगता है। क्या मैं जान सकता हूं क्यों? यदि आवश्यकता हो तो क्या आप अपने प्रश्न को फिर से लिख सकते हैं? –
प्रश्न में पहले से ही समस्या के संदर्भ में जानकारी शामिल है। स्ट्रिंग WYSIWYG संपादक से उत्पन्न होती है। – estus
और आप इसे एक प्रतिक्रिया घटक में बदलना चाहते हैं? परंपरागत रूप से यह चारों ओर एक और तरीका रहा है - घटक => (प्रतिक्रिया + प्रतिक्रिया-डोम) => htmlString। आपके द्वारा उल्लिखित मामले को छोड़कर, आप अभी यह कैसे कर रहे हैं? जो मैं समझने में असफल रहा हूं क्या आप WYSIWYG से उत्पन्न एचटीएमएल को घटक को प्रतिक्रिया देने के लिए स्वचालित तरीके की तलाश कर रहे हैं? या क्या कस्टम तत्वों की एक सूची है जिसे आप रिट/प्रतिक्रिया-जैसे lib के लिए पोर्ट करना चाहते हैं। –