javascript - 如何使用 React-Intl 插入带有 injectIntl formatMessage 的 HTML 标记?
问题描述
我有一个 react-intl 包问题。我正在使用 injectIntl 方式在组件中使用道具。纯字符串很好,但如果我包装了 HTML 标记,它将不起作用。
纯字符串成功案例
const _tableNoText = intl.formatMessage(
{ id: 'footer.table_no' },
{ value: basket.table }
);
//console -> Table 1
带有 HTML 标签失败案例的纯字符串
const _tableNoText = intl.formatMessage(
{ id: 'footer.table_no' },
{ value: <b>basket.table</b> }
);
// console -> Table [object object]
如果我将 更改formatMessage
为formatHTMLMessage
,它将输出与上述相同的结果,我应该如何解决?
非常感谢大家。
解决方案
当您使用时,{ value: <b>basket.table</b> }
您实际上是在创建 React 组件b
,它是一个普通的 JavaScript 对象。这一步只是被tsx
(或jsx
)编译器隐藏起来。
所以如果你想渲染 HTML,你必须用引号包裹实际的 HTML 字符串,然后翻译字符串,然后让 React 将 HTML 字符串解包(或转换)为 DOM 元素。
const translated = intl.formatMessage(
{ id: 'footer.table_no' },
{ value: '<strong>STRONG</strong>' }
);
return (
<div dangerouslySetInnerHTML={{__html: translated}} />
)
如果要进行插值basket.table
,只需将其作为另一个值传递:
...
{
value: '<strong>STRONG</strong>',
table: basket.table,
}
推荐阅读
- sql - 根据 SQL Server 中的案例语句对数据进行分组?
- typo3 - 使用自定义 be-module 中的链接向导的typo3
- c - C 预处理器:不允许 #include 指令的参数以数字开头的原因是什么?
- javascript - 为什么会这样?我在控制台输出中得到了正确的显示,在 UI 中得到了正确的行数,但我没有得到任何输出
- oracle - 无法将 NULL 插入表中
- javascript - 打字稿扩展类没有按预期工作
- python - 有没有办法镜像 python 函数?
- javascript - Nuxtjs:如何在另一个组件中调用组件?
- javascript - Google Apps 脚本 - 您能否从单元格或预定义的文本字符串中获取 IF 语句的条件?
- javascript - 是否可以通过 JS 注释掉特定的脚本?