Javascript 获取从React中的函数返回的字符串而不是html
在我的盖茨比博客(react组件)的顶部,我有一个获取url扩展名的函数,根据它是图像还是视频,它返回一行html,如下所示:Javascript 获取从React中的函数返回的字符串而不是html,javascript,reactjs,jsx,gatsby,Javascript,Reactjs,Jsx,Gatsby,在我的盖茨比博客(react组件)的顶部,我有一个获取url扩展名的函数,根据它是图像还是视频,它返回一行html,如下所示: const printPicOrVid = function(myUrl) { let fileExt = myUrl.substring(myUrl.lastIndexOf(".") + 1, myUrl.length) || myUrl if (fileExt === "jpg" || fileExt === "png" || fil
const printPicOrVid = function(myUrl) {
let fileExt =
myUrl.substring(myUrl.lastIndexOf(".") + 1, myUrl.length) || myUrl
if (fileExt === "jpg" || fileExt === "png" || fileExt === "gif") {
return '<img src="https:' + myUrl + '" />'
} else if (fileExt === "mp4") {
return '<video src="https:' + myUrl + '"></video>'
}
}
也就是说:如果contentful中的英雄图像存在,那么返回jpg或mp4html。问题是,我只是将一个HTML字符串打印到页面上,而不是像预期的那样呈现实际图像或视频的HTML
有一种感觉,这里的答案是危险地设置了内部HTML,但不确定如何实现。非常感谢您的帮助。在函数中返回JSX时,只需简单地返回所需的JSX元素即可。所以你要写
return
,而不是return'
。因此:
return '<img src="https:' + myUrl + '" />'
返回“”
应该是
return <img src={"https:" + myUrl} />
返回
否则,您将返回一个字符串而不是JSX。在另一个return语句中相同,应该是:
return <video src={"https:" + myUrl}></video>
返回
在函数中返回JSX时,只需简单地返回所需的JSX元素即可。所以你要写return
,而不是return'
。因此:
return '<img src="https:' + myUrl + '" />'
返回“”
应该是
return <img src={"https:" + myUrl} />
返回
否则,您将返回一个字符串而不是JSX。在另一个return语句中相同,应该是:
return <video src={"https:" + myUrl}></video>
返回
您需要返回一个
,属性设置为{{{{uuu html:printPicOrVid(edge.node.herograge.file.url)}
完整代码:
{edge.node.heroImage && <div dangerouslySetInnerHTML={{ __html: printPicOrVid(edge.node.heroImage.file.url) }} />}
{edge.node.heroMage&&}
您需要返回一个
,属性设置为{{{{uuu html:printPicOrVid(edge.node.herograge.file.url)}
完整代码:
{edge.node.heroImage && <div dangerouslySetInnerHTML={{ __html: printPicOrVid(edge.node.heroImage.file.url) }} />}
{edge.node.heroMage&&}
事实上,伊斯梅尔的主意更好。只需返回JSX img或video元素,并将src
设置为动态字符串,而不是将整个元素设置为字符串实际上是的,Ismael是一个更好的主意。只需返回JSX img或video元素,并将src
设置为动态字符串,而不是将整个元素设置为字符串谢谢!我想如果可能的话我应该避免使用危险的西汀,所以我选择了Ismael的解决方案,感谢你的回答。谢谢!我想如果可能的话,我应该避免使用危险的西汀,所以我选择了伊斯梅尔的解决方案,尽管我很感激这个答案。