3 回答

TA貢獻(xiàn)1963條經(jīng)驗(yàn) 獲得超6個(gè)贊
JSX沒有存儲(chǔ)在您的Javascript中,而是存儲(chǔ)為一組React.createElement命令。
因此,一個(gè)想法是攔截React.createElement并獲取值。
然后逆向生成HTML。
下面是一個(gè)示例,它還不完整,但是您可以對(duì)其進(jìn)行增強(qiáng)等。
當(dāng)然,這并不是完美的,因?yàn)槟承┬畔?huì)丟失。{2+xyz},已轉(zhuǎn)換為9,因?yàn)樵诰幾g時(shí)已經(jīng)對(duì)其進(jìn)行了評(píng)估。
const ret = [];
const React = {createElement: (...args) => { return args}};
const xyz = 7;
const jsx = <div>
<div>hello <b>there {2+xyz}</b></div>
<span>span content {() => "abc"}</span>
</div>;
function render(jsx, indent = '') {
let ret = '';
ret += `${indent}<${jsx[0]}>`;
for (let l = 2; l < jsx.length; l += 1) {
const v = jsx[l];
if (Array.isArray(v)) ret += '\r\n' + render(v, indent + ' ')
else if (typeof v === 'function') ret += `{${v}}`;
else { ret += v; }
}
ret += `${indent}</${jsx[0]}>\r\n`;
return ret;
}
console.log(render(jsx));
添加回答
舉報(bào)