9

I have an error message like the one below:

Could not retrieve data: ${e}

How do I convert this to a definedMessage that can accept this error parameter?

A standard definedMessage:

    const messages = defineMessages({
     dataError: {
         id: 'data.error',
         defaultMessage: 'Could not retrieve data: [default message]'
     }
   })

Thanks!

reectrix
  • 7,999
  • 20
  • 53
  • 81

3 Answers3

21

If I understood you correctly like this:

const messages = defineMessages({
  dataError: {
    id: 'data.error',
    defaultMessage: 'Could not retrieve data: {message}'
  }
})

<FormattedMessage
  {...messages.dataError}
  values={{message: `Could not retrieve data: ${e}`}}
/>
Tomasz Mularczyk
  • 34,501
  • 19
  • 112
  • 166
10

need to replace [default message] with {e} in defineMessages

const messages = defineMessages({
  dataError: {
    id: 'data.error',
    defaultMessage: 'Could not retrieve data: {e}'
  }
})

Define Message variable

 const message = "Error Message";

Pass message variable in Formatted Message

 <FormattedMessage
          {...messages.dataError}
          values={{ e: `${message}` }}
 />

Out Put in below

<span>Could not retrieve data: Error Message</span>

Hope it will help you.

USS
  • 460
  • 4
  • 16
  • @reectrix, If my answer seems helpful to you, vote, please. – USS May 18 '18 at 11:35
  • Hello, what if I want const messages = defineMessages({ dataError: { id: 'data.error', defaultMessage: (e,t) => { return { id: e, defaultMessage: t } } } }) – jay rangras Aug 04 '22 at 07:43
-1

This can be done more simple. e.g. Where 'launcher.question' could be something like

'launcher.question': 'Dear {e} tell us about' <--- this is in your IntlProvider message definitions.

<FormattedMessage id='launcher.question' values={{ e: this.state.clientName}} />

Egbert Nierop
  • 2,066
  • 1
  • 14
  • 16