如何在react-intl的defineMessages中传递参数?
如何将带参数的错误消息转换为defineMessages格式?
没问题,我来帮你搞定这个转换!在react-intl的defineMessages里处理带参数的消息其实很简单,只需要用占位符来替代原来的${e}变量即可,具体实现如下:
首先,修改你的defineMessages配置,把动态参数用{参数名}的形式定义在defaultMessage里:
import { defineMessages } from 'react-intl'; const messages = defineMessages({ dataError: { id: 'data.error', defaultMessage: 'Could not retrieve data: {error}' } });
这里的{error}就是对应你原来${e}的占位符,你可以根据需要命名参数(比如叫message或者reason都可以,只要语义清晰)。
接下来,在使用这个消息的时候,通过formatMessage方法传入实际的错误参数:
import { useIntl } from 'react-intl'; function YourComponent() { const intl = useIntl(); // 假设e是你捕获到的错误对象或错误文本 const errorText = typeof e === 'object' ? e.message : e; const errorMessage = intl.formatMessage(messages.dataError, { error: errorText }); return <div className="error">{errorMessage}</div>; }
小提示:如果你的错误e是一个Error对象,直接传入的话可能会显示[object Error],所以最好提取它的message属性或者转换成字符串后再传入,这样用户看到的错误信息会更友好。
内容的提问来源于stack exchange,提问作者reectrix
相关产品推荐
相关产品推荐

