Ste*_*phD 2 javascript jsx reactjs gatsby
在我的 gatsby 博客(一个 React 组件)的顶部,我有一个获取 url 扩展名的函数,并根据它是图像还是视频返回一行 html,如下所示:
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>'
}
}
Run Code Online (Sandbox Code Playgroud)
它成功返回类似的字符串<img src="https://contentful.com/whatever/image.jpg" />
在我的反应页面的返回部分中,我有:
{edge.node.heroImage && printPicOrVid(edge.node.heroImage.file.url)}
Run Code Online (Sandbox Code Playgroud)
也就是说:如果 contentful 中的 HeroImage 存在,则返回 jpg 或 mp4 html。问题是,我只是将 HTML 字符串打印到页面上,而不是按照预期渲染实际图像或视频的 html。
有一种感觉,这里的答案是危险地设置内部 HTML,但不确定如何实现。非常感谢任何帮助,谢谢。
当在函数中返回 JSX 时,您应该简单地返回您想要的 JSX 元素。所以你会写return <div/>而不是return '<div/>'. 所以:
return '<img src="https:' + myUrl + '" />'
Run Code Online (Sandbox Code Playgroud)
应该
return <img src={"https:" + myUrl} />
Run Code Online (Sandbox Code Playgroud)
否则你会返回一个字符串而不是 JSX。其他 return 语句也是如此,应该是:
return <video src={"https:" + myUrl}></video>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1189 次 |
| 最近记录: |