Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 获取从React中的函数返回的字符串而不是html_Javascript_Reactjs_Jsx_Gatsby - Fatal编程技术网

Javascript 获取从React中的函数返回的字符串而不是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

在我的盖茨比博客(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>'
    }
  }
也就是说:如果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的解决方案,感谢你的回答。谢谢!我想如果可能的话,我应该避免使用危险的西汀,所以我选择了伊斯梅尔的解决方案,尽管我很感激这个答案。