reactjs - 变量 JSX 进入危险地渲染 SetInnerHTML()
问题描述
我需要将一个变量插入到 dangerouslySetInnerHTML 中。
import serviceAPI from "serviceAPI";
const [content,setContent] = useState("");
const [firstName,setFirstName] = useState("Thomas");
useEffect(() => {
fetchContent()
}, [])
const fetchContent = async () => {
// Return string : "<h1>Hello {firstName}</h1>"
const result = await serviceAPI.getContent()
setContent(text)
}
return (
<p dangerouslySetInnerHTML={{ __html: content.toString() }}></p>
)
这段代码的结果:Hello {firstName}
我需要的结果:Hello Thomas
解决方案
您可以使用字符串插值或简单连接将变量插入字符串:
const text = `<h1>Hello ${firstName}</h1>`
此外,您还需要将 firstName 添加到 useEffect 的依赖项列表中。
在您的代码示例中,您不需要使用useEffect
,我会将其更改为:
const [firstName,setFirstName] = useState("Thomas")
const content = `<h1>Hello ${firstName}</h1>`
return (
<p dangerouslySetInnerHTML={{ __html: content }} />
)
如果字符串是从 API 返回的,您可以使用正则表达式搜索和替换:
const text = "<h1>Hello {firstName}</h1>"
const newText = text.replace(/{firstName}/g, firstName)
推荐阅读
- cassandra - cassandra 与恢复的节点同步
- ios - 使用 Apple 登录
- python - 在 Python 中交换大文件字节的最快方法
- selenium - 寻找 org.openqa.selenium.support.ui.Select jar 路径
- java - 复合关系将父引用分配给子/反序列化
- android - 无法在本机反应中看到来自android存储的图像
- java - 当我们尝试使用 @Value 注释从 appliction.properties 访问值时,trim() 不起作用
- php - wget 作为后台任务,然后是连续的后台任务
- javascript - 如何防止页面在长循环中冻结,而不会失去“for”或“forEach”的精度?
- python - Python NameError,我无法理解