intl.formatMessage不工作 - react-intl

Abr*_*ngh 8 reactjs redux react-intl react-redux babel-plugin-react-intl

我正在尝试使用语言翻译react-intl.当我使用它时<FormattedMessage id='importantNews' />,它是完美的.但是,当我使用以下代码时intl.formatMessage(),它不起作用并抛出一些错误.我不知道它有什么问题.

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

function HelloWorld(props) {
  const { intl } = props;
  const x = intl.formatMessage('hello') + ' ' + intl.formatMessage('world'); //not working
  const y = <FormattedMessage id='hello' />; //working
  return (
    <button>{x}</button>
  );
}

export default injectIntl(HelloWorld);
Run Code Online (Sandbox Code Playgroud)

我的根组件是这样的,

import ReactDOM from 'react-dom';
import { addLocaleData, IntlProvider } from 'react-intl';
import enLocaleData from 'react-intl/locale-data/en';
import taLocaleData from 'react-intl/locale-data/ta';

import HelloWorld from './hello-world';

addLocaleData([
  ...enLocaleData,
  ...taLocaleData
]);

const messages = {
  en: {
    hello: 'Hello',
    world: 'World'
  },
  ta: {
    hello: '???????',
    world: '?????'
  }
};

ReactDOM.render(
  <IntlProvider key={'en'} locale={'en'} messages={messages['en']}>
    <HelloWorld />
  </IntlProvider>,
  document.getElementById('root')
);
Run Code Online (Sandbox Code Playgroud)

有人可以帮我解决这个问题吗?提前致谢.

Tom*_*ich 11

你需要调用formatMessageMessageDescriptor,不只是id:

const x = intl.formatMessage({id: 'hello'}) + ' ' + intl.formatMessage({id: 'world'});
Run Code Online (Sandbox Code Playgroud)

为了更好地记住这一点 - 使用prop调用组件id:

<FormatMessage id="Hello" />
Run Code Online (Sandbox Code Playgroud)

道具实际上是一个键值字典:

// this is the same as above
<FormatMessage {...{id: 'hello'}} />
Run Code Online (Sandbox Code Playgroud)

现在,formatMessage函数接受与FormatMessage组件相同的道具:

formatMessage({id: 'hello'})
Run Code Online (Sandbox Code Playgroud)