javascript - 如何使用 React-Intl 插入带有 injectIntl​​ formatMessage 的 HTML 标签?

标签 javascript reactjs react-intl

我有一个 react-intl 包问题。我正在使用 injectIntl​​ 方式在组件中使用 Prop 。纯字符串很好,但如果我包装 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,
}

关于javascript - 如何使用 React-Intl 插入带有 injectIntl​​ formatMessage 的 HTML 标签?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55253355/

相关文章:

javascript - 如何在 Python 中使用 Appengine 读写文件?

reactjs - Jest - 在 React 中测试模态会出错

javascript - 如何在 React Js 的 map 函数中使用 Bootstrap Modal 渲染单个元素?

JavaScript 动画回退

javascript - 我的 jQuery 运行有点慢。我怎样才能加快速度?

javascript - 与静态内容重叠的输入标签

javascript - React ant-design 中的自动完成过滤器

typescript - React-intl,将 api 与 Typescript 一起使用

javascript - 来自react-intl的FormattedNumber组件不起作用

javascript - Babel插件为react-intl开发