使用map遍历t方法返回数组时报t(...).map is not a function错误如何解决
问题排查与解决方案
核心错误原因排查
- 参数名拼写错误:你代码中传入的配置参数是
returnObject: true,i18next 官方指定返回数组/对象的参数名为带复数的returnObjects,少写末尾的s会导致配置不生效,t函数默认返回字符串而非数组,自然无法调用map方法。
修正后的基础调用写法:t("text", { returnObjects: true }) - 初始渲染异步加载问题:console.log打印的数组是翻译资源加载完成后的更新值,首次渲染时翻译资源还未加载完成,t函数会默认返回字符串类型的键名或者undefined,此时调用map就会报错,属于前端异步资源加载的常见时序问题。
解决方法:增加类型校验或可选链兜底:{/* 写法1:可选链兜底,资源未加载时不渲染 */} {t("text", { returnObjects: true })?.map((text, index) => ( <li key={index}>{text}</li> ))} {/* 写法2:显式判断数组类型再渲染 */} { (() => { const textArr = t("text", { returnObjects: true }) return Array.isArray(textArr) ? textArr.map((text, index) => <li key={index}>{text}</li>) : null })() } - 附加写法问题:你当前map回调内返回的是
{text}格式的对象,不是React可渲染的元素,渲染无序列表需要返回<li>节点;同时数组遍历的第二个参数是索引,不是你命名的country_code,命名错误容易引发后续逻辑问题。
额外校验项
- 检查i18next全局配置是否开启了
returnObjects: true,如果全局开启不需要每次调用单独传参 - 确认你当前使用的语言包中,
text对应的配置确实是数组格式,没有拼写错误或者结构嵌套问题
内容的提问来源于stack exchange,提问作者Bakhromkhuja
相关产品推荐
相关产品推荐

