[英]Convert template literal to string
我有一個 React 組件,它在其中接收一個道具codeBlock
,然后將其存儲在組件的 state 中。
它具有以下結構:
codeBlock = {
code: `<div></div>`,
language: 'html'
}
我想將這個模板文字字符串codeBlock.code
轉換為 html 元素,這樣當我在呈現元素時添加/追加它時,我將獲得 DOM 元素而不是文字字符串。
到目前為止我嘗試過的事情,
在componentDidMount()
中,我嘗試了兩種不同的方法:-
componentDidMount() {
const parser = new DOMParser();
const output = parser.parseFromString(this.state.codeBlock.code, 'text/html');
this.setState({
output
});
}
此方法不起作用並拋出此錯誤:對象作為反應子項無效(找到:[object htmldocument])
componentDidMount() {
this.setState({
output: String.raw `${this.state.codeBlock.code}`
});
}
此方法按原樣打印模板字符串並且不創建任何元素。
在下面的代碼部分中,它應該呈現為 html 元素而不是字符串。
您可以使用innerHTML
。
HTML:
<div id="elem"></div>
記者:
const codeBlock = {
code: `<div class="container"></div>`,
language: 'html'
}
const elem = document.getElementById("elem");
elem.innerHTML = codeBlock.code;
最好的解決方案是不傳遞字符串而是傳遞 React 元素(或兩者):
codeBlock = {
code: "<div></div>", // string here
rendered: <div></div>, // jsx here
language: 'html'
}
您可以輕松地將其渲染到 React 組件中。 但是,如果您真的必須處理 html 的字符串(正如名稱codeBlock
和其他語言的可用性所暗示的那樣),您將不得不使用innerHTML
或 React 的等價物dangerouslySetInnerHTML
。
請注意,字符串值最初是使用模板文字語法創建的並不重要(或幫助)。 它對接收字符串的組件沒有影響。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.