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

如何正确从router.query提取字符串并完成文章ID匹配对比

问题根因

你在对比值时额外添加了不必要的对象包裹语法:{ articleDetails }.toString() 会先创建一个键为articleDetails、值为路由参数的新对象,对象执行toString()方法后的结果是固定的[object Object],自然和文章ID的字符串无法匹配。你直接写固定值"1"时没有这层对象包裹,所以可以正常匹配。

正确写法

直接使用提取出来的articleDetails变量做转换即可,不需要额外加花括号。同时建议先判断路由加载完成,避免Next.js首次hydration时query为空导致报错:

const router = useRouter();
// 路由未加载完成时可返回加载状态
if (!router.isReady) return <div>加载中...</div>

const { articleDetails } = router.query;
const articleData = data.project.find(
  (post) => post.id.toString() === articleDetails.toString()
);

额外优化建议

如果路由参数articleDetails本身可能是数组(动态路由配置为多段匹配的场景),可以再加一层取值判断,确保拿到的是字符串格式的ID:

const articleId = Array.isArray(articleDetails) ? articleDetails[0] : articleDetails
const articleData = data.project.find(
  (post) => post.id.toString() === articleId.toString()
);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 00:45:01