首页 > 解决方案 > 从格式化消息中提取字符串

问题描述

我正在尝试从中提取字符串部分,FormattedMessage以便可以访问它并使用 CSV 导出它。
这是我的FormattedMessage代码(IntlMessages.js):

import React from 'react';
import {FormattedMessage, injectIntl} from 'react-intl';

const InjectMassage = props => <FormattedMessage {...props} />;

export default injectIntl(InjectMassage, {
  withRef: false
});

为了显示数据,我使用

<IntlMessage id="" />

来自哪里IntlMessage的代码的导入语句FormattedMessage

import IntlMessage from ./"IntlMessages.js";

我根据存储在 json 文件中的 id 获取字符串。

我只想从中提取字符串,IntlMessage以便我可以操作并导出为 CSV,因为它现在以[object Object]. 我正在使用材料表来显示数据,它就像:

title: <IntlMessage id="" />

我是这个 react-intl 的新手,并且无法取得进展,所以如果有人可以指导我,这将对我有所帮助。

编辑:
我正在使用材料表,我想下载 csv,但现在我得到[object Object]的只是标题IntlMessages。我想将一个字符串返回到标题,以便在下载时出现该字符串而不是[object Object].

我也尝试过<IntlProvider textComponent={React.Fragment}>,但这也行不通。

标签: javascriptreactjsmaterial-uimaterial-tablereact-intl

解决方案


如果您使用的是类组件,则可以使用injectIntlHOC 将intl对象提供给道具,然后用于intl.formatMessage({...})获取字符串中的标题。您问题中的代码不起作用,因为它使用FormattedMessage的是一个反应组件(对象):

const Content = injectIntl(MaterialTableContainer);

在返回的组件内部MaterialTable

<MaterialTable
  columns={[
    {
      title: this.props.intl.formatMessage({
        id: "titleId",
        defaultMessage: "Title"
      }),
      field: "name"
    },

现场演示源代码


推荐阅读