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

tom*_*hoo 5 javascript reactjs react-intl

我有一个 react-intl 包问题。我正在使用 injectIntl​​ 方式在组件中使用道具。纯字符串很好,但如果我包装了 HTML 标签,它将不起作用。

纯弦成功案例

const _tableNoText = intl.formatMessage(
    { id: 'footer.table_no' },
    { value: basket.table }
);
//console -> Table 1
Run Code Online (Sandbox Code Playgroud)

带有 HTML 标签失败案例的纯字符串

const _tableNoText = intl.formatMessage(
    { id: 'footer.table_no' },
    { value: <b>basket.table</b> }
);
// console -> Table [object object]
Run Code Online (Sandbox Code Playgroud)

如果我更改formatMessageformatHTMLMessage,它将输出与上述相同的结果,我该如何解决?

非常感谢大家。

mar*_*tin 5

当您使用时,{ 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}} />
)
Run Code Online (Sandbox Code Playgroud)

如果您想插值,basket.table只需将其作为另一个值传递:

...
{
  value: '<strong>STRONG</strong>',
  table: basket.table,
}
Run Code Online (Sandbox Code Playgroud)