आप स्ट्रिंग
<div>Hello World</div>
पर विचार अगर हम बहुत सख्त हैं, तो यह वास्तव में वैध JSX है। प्रश्न यह है कि इस जेएसएक्स स्ट्रिंग को रिएक्ट कोड में कैसे संकलित करें।
सबसे आसान और अनुशंसित तरीका बैबेल जैसी कुछ लाइब्रेरी डाउनलोड करना और कोड को बदलने के लिए इसका उपयोग करना है। बैबेल ब्राउज़र में repl does जैसे चला सकता है।
जेएसएक्स को अन्य प्रारूपों में बदलने के लिए भी संभव है, लेकिन इस मामले में आपको एक कंपाइलर ढूंढना होगा या स्वयं को बनाना होगा।
बनाने के लिए चरणों JSX => परिवर्तन प्रतिक्रिया अपने आप को है:
- एएसटी प्रतिनिधित्व में कोड स्ट्रिंग को बदलने
तो स्ट्रिंग के लिए वापस AST और उत्पादन कोड पार्स आप एएसटी पार्सर की कुछ किंडर की तरह espree जेएसएक्स का समर्थन करते हैं और फिर आप एक कोड बना सकते हैं जो एएसटी पेड़ पर चलता है और कुछ आउटपुट करता है, जैसे इसे रीक्ट-कोड आउट करें।
जेएसएक्स डेटा के एएसटी पेड़ में जेएसएक्स नोड्स के साथ सामान्य जावास्क्रिप्ट एएसटी शामिल है। पार्सर को पेड़ के माध्यम से चलना चाहिए और जेएसएक्स नोड्स को सामान्य जावास्क्रिप्ट कोड में बदलना चाहिए।
यदि आप प्रतिक्रिया करने के लिए संकलित करते हैं और टैग "div" के साथ एक जेएसएक्स नोड का सामना करते हैं तो आपको उस कॉल के पैरामीटर के रूप में डाले गए एएसटी नोड के तहत पाए गए गुणों और उपन्यासों के साथ React.createElement("div",...
में संकलित करना चाहिए।
मैंने एक छोटा एएसटी वाकर बनाया है, जो एएसटी पेड़, ASTWalker को संसाधित कर सकता है, जिसका उपयोग एएसटी पेड़ को कुछ आउटपुट प्रारूप में बदलने के लिए किया जा सकता है, जैसे रिएक्ट या डोम।
ऑन लाइन है कि यह कैसे उपयोग करने के लिए के उदाहरण यहाँ है:
http://codepen.io/teroktolonen/pen/KzWVqx?editors=1010
मुख्य कोड इस तरह दिखता है:
// here is the JSX string to parse
var codeStr = "<div>Hello world</div>";
var walker = ASTWalker({
defaultNamespace: "react",
});
// compile AST representation out of it.
var rawAST = espree.parse(codeStr, {
ecmaVersion: 6,
sourceType: "script",
// specify additional language features
ecmaFeatures: {
// enable JSX parsing
jsx: true
}
});
// then you can walk the walk to create the code
walker.startWalk(rawAST, {});
var code = walker.getCode();
console.log(code);
document.getElementById("sourceCode").innerHTML = code;
अस्वीकरण: पुस्तकालय प्रतिक्रिया में संकलन के लिए intented नहीं है । सादा जावास्क्रिप्ट + डीओएम प्रतिनिधित्व में संकलित करने के लिए इसका उपयोग ज्यादातर defaultNamespace: "DOM",
के साथ किया जाता है। सरल टैग की तुलना में कुछ अधिक जटिल कोशिश करने से एक त्रुटि हो सकती है।
महत्वपूर्ण बात यह ध्यान रखना है कि प्रतिक्रिया केवल जेएसएक्स के लिए संभव आउटपुट प्रारूप नहीं है।
क्या आप एक नमूना स्ट्रिंग प्रदान कर सकते हैं जिसे आप जेएसएक्स में कनवर्ट करना चाहते हैं? –
'
आपकी नमूना स्ट्रिंग सिर्फ शुद्ध HTML है। यदि आप सिर्फ HTML को इंजेक्ट करना चाहते हैं तो 'खतरनाक रूप से SetInnerHTML' जाने का तरीका है। यदि आप चाहें तो मैं इसे अधिक विस्तृत उत्तर में निकाल सकता हूं। –