【发布时间】:2019-04-14 14:04:49
【问题描述】:
这就是翻译文本字符串并在 JSX 中实现它们。
假设我有两个字符串。一个用于英语,另一个用于西班牙语,如下所示:
英语
const phrase = `this is just a string with some [replace]weird[/replace] link inside`
西班牙语
const phrase = `esto es solo un string con un [replace]raro[/replace] enlace dentro`
当我处于英语模式时,字符串当然会作为第一个示例。
我正在尝试用这样的组件替换 [/replace] 中的 [replace] 单词。
<p dangerouslySetInnerHTML={{
__html: phrase.replace(/\[replace\](.*)\[\/replace\]/, <Link to={linkurl} >test</Link>)
}}>
输出是:这只是一个字符串,里面有一些 [object Object] 链接
这个很好用,只使用普通的html标签
<p dangerouslySetInnerHTML={{
__html: phrase.replace(/\[replace\](.*)\[\/replace\]/, "<b>$1</b")
}}>
</p>
输出是:这只是一个字符串,里面有一些奇怪的链接
我还尝试了以下方法:
<p dangerouslySetInnerHTML={{
__html: phrase.replace(/\[replace\](.*)\[\/replace\]/, "<Link to=\""+linkurl+"\">$1</Link>")
}}>
</p>
输出为:this is just a string with some weird link inside
但是“奇怪”这个词应该是一个链接元素,而不是......
顺便说一下,该组件只是 gatsby 的一个组件,它允许您使用路由导航(当前使用到达路由器)。
【问题讨论】:
-
问题是 JSX 代码
<Link to={linkurl} >test</Link>将被转换为React.CreateElement(...)并且它最终确实是对象,您可以看到结果。检查:stackoverflow.com/questions/19266197/reactjs-convert-to-html 或者谷歌react to html -
问题是,为什么需要在变量中添加一个JSX对象呢?尝试添加组件并仅替换 url、文本或其他内容会更容易。您是否有特定的用例,因此我们可以提出替代方案?
-
@c-chavez 我同意这个论点,另一方面,有时您确实需要用静态标记替换 JSX。以下是该主题的更多信息:medium.com/@arkadiusz.machalica/…
-
@c-chavez 这些字符串来自一个数据库,由其他人翻译(我只是在这里使用了一个随机短语作为示例)。有时你需要一个短语或短语的单词之间的超链接,这取决于语言,所以我们只使用简单的模板格式,然后用适当的 html 代码替换它。但我们在这里与 React+Gatsby 交谈。
-
我设法“让它工作”,至少让它使用 `ReactDOMServer.renderToString(anchor
标签: string reactjs jsx gatsby template-strings