reactjs - 无法使用 Helmet 获取 Reactjs 来运行脚本标签
问题描述
我在 Reactjs 中使用 Helmet 来提供每页的元数据 - 在我想在标签中提供 Schema 标记之前,它工作得很好。我正在按照文档描述来实现,但是由于我的标记来自 api,我需要转义代码以返回我的函数,我得到这个错误;
TypeError: tag[primaryAttributeKey].toLowerCase 不是函数
如果脚本只是页面上的一个字符串,则该脚本可以工作,但是当我调用该函数时,它会出错
这是我的代码;
async componentWillMount(){
var data = await api.schema();
this.setState({schema: data.data});
console.log(this.state.schema);
}
getSchema(){
if(this.state.schema.length){
return this.state.schema.map((content,index) => {
var pageschema = content.PageSchema;
return(
pageschema
);
})
}
}
render() {
return (
<div>
<Helmet>
<meta charSet="utf-8" />
<title>Title title title</title>
<meta name="description" content="this is a page description"></meta>
<link rel="canonical" href="xxx" />
<script type="application/ld+json">{this.getSchema()}</script>
</Helmet>
...
页面模式返回以下已 JSON.parsed
"@context": "https://schema.org",
"@type": "Organization",
"name": "xx",
"alternateName": "xx",
"url": "xx",
"logo": ""
有没有人有什么建议?
解决方案
要工作,您需要在发送之前对数组进行字符串化Helmet
:
getSchema(){
const { schema } = this.state
if(schema.length){
return `${JSON.stringify(
schema.map((content,index) => {
const pageschema = content.PageSchema;
return(
pageschema
);
})
)}`
}
}
推荐阅读
- android - Angular 数据库抽象层的最佳方法是什么?
- python - keras适合时间/步长差异
- html - 有没有办法让我强制使用 HTML
- 为了制作SPA,要固定大小?
- spring-boot - 在 Spring Boot 中排除某些 URL 的自定义过滤器
- sql - PDO 查询, WHERE x like ? 没有返回任何结果
- amazon-web-services - 在云形成中输出 apikey 值
- python - 我应该从更标准的数学库中重载 sin(x) 还是开发自己的类方法 sin?
- azure - Azure AD B2C 自定义域
- java - 如何在 100 秒后或调用一次后将字符串值返回为 null?
- angularjs - 是否有任何简单直接的方法来模拟\测试 MSAL JS $rootScope.$on("msal:acquireTokenFailure") 事件?