Upgrade Guide (v4 -> v5)
Breaking API Changes
- Rich text formatting callback function is no longer variadic.
Before:
new IntlMessageFormat('a<b>strong</b>').format({
b: (...chunks) => <strong>{chunks}</strong>,
})
After:
new IntlMessageFormat('a<b>strong</b>').format({
b: chunks => <strong>{chunks}</strong>,
})
FormattedMessagerender prop is no longer variadic.
Before:
<FormattedMessage defaultMessage="a<b>strong</b>">
{(...chunks) => <b>{chunks}</b>}
</FormattedMessage>
After:
<FormattedMessage defaultMessage="a<b>strong</b>">
{chunks => <b>{chunks}</b>}
</FormattedMessage>
- Using
FormattedMessagewithout aintlcontext will fail fast.
Why are we doing those changes?
Rich text formatting callback function is no longer variadic
- We received feedback from the community that variadic callback function isn't really ergonomic.
- There's also an issue where React
chunksdo not come with keys, thus causing warning in React during development. - The
chunksby themselves are not enough to render duplicate tags, such as<a>link</a> and another <a>link</a>where you want to render 2 differenthrefs for the<a>tag. In this casea: chunks => <a>{chunks}</a>isn't enough especially when the contents are the same. In the future we can set another argument that might contain metadata to distinguish between the 2 elements.
FormattedMessage render prop is no longer variadic
- Same reasons as above.
Using FormattedMessage without a intl context will fail fast
- This also comes from Dropbox internal developer feedback.
FormattedMessagehas a default English renderer that masksProvidersetup issues which causes them to not be handled during testing phase.