You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

JSX映射元素中动态变量传参至usePageNameFormat报错求助

解决JSX映射数组时的语法错误与Hook使用问题

1. 语法错误修复:动态属性访问

你当前代码中 post.pageName.${locale} 的写法是无效JavaScript语法。要通过变量访问对象的动态属性,需使用方括号语法替代错误的模板字符串拼接方式。

替换:

post.pageName.${locale}

为:

post.pageName[locale]

2. React Hook使用规范(关键注意点)

如果 usePageNameFormat 是React自定义Hook,不能在 map 循环内部调用它——这违反了React的Hook规则(Hook必须在组件顶层作用域调用,不能嵌套在循环、条件或嵌套函数中)。

解决方案分两种情况:

情况一:usePageNameFormat 是纯函数(非Hook)

若它只是普通格式化函数,直接在 map 中调用即可,修正后代码如下:

<>
  {navigationData && navigationData[0].navItems.map((post, index) => 
    <Link 
     key={index}
     href={`/pages/${usePageNameFormat(post.pageName[locale])}`}>
      {post.pageName[locale]} {/* 显示本地化后的页面名称,而非整个对象 */}
    </Link>
  )}
</>
情况二:usePageNameFormat 是React Hook

此时需将单个导航项拆分为独立组件,在组件顶层调用Hook:

// 子组件:单独处理每个导航链接
const NavItemLink = ({ pageName, locale }) => {
  const formattedPageName = usePageNameFormat(pageName[locale]);
  return (
    <Link href={`/pages/${formattedPageName}`}>
      {pageName[locale]}
    </Link>
  );
};

// 父组件中使用
<>
  {navigationData && navigationData[0].navItems.map((post, index) => 
    <NavItemLink 
     key={index}
     pageName={post.pageName} 
     locale={locale} />
  )}
</>

额外优化建议

  • 避免使用数组索引作为 key,若 post 有唯一标识(如 id),改用该标识作为 key,提升渲染性能。
  • 使用模板字符串拼接 href 比 + 更简洁易读。

内容的提问来源于stack exchange,提问作者mertk

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.14 15:42:44