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

Next.js重置密码流程中首次请求token为何显示undefined?

解决页面加载时useRouter query.token首次请求显示undefined的问题

问题原因

Next.js 的useRouter返回的query对象,在页面初始渲染阶段可能还没完成URL参数的解析,导致直接在组件顶层获取query.token会拿到undefined——哪怕URL里确实存在这个参数。

另外你代码里还有个小细节:setDatas(response.data)是异步操作,所以then里立刻console.log(Datas)打印的还是更新前的旧值,不是刚请求到的新数据。

修正后的代码

import { useEffect } from 'react';
const { push, query } = useRouter();
const [Datas, setDatas] = useState([]);

// 用useEffect包裹请求,确保query解析完成后再执行
useEffect(() => {
  const token = query.token;
  // 先判断token存在再发起请求,避免无效请求报错
  if (!token) return;

  axios
    .get(`${variables.API_URL}Auth/reset-password/${token}`)
    .then(function (response) {
      setDatas(response.data);
      // 要打印最新请求数据直接用response.data即可
      console.log("最新请求数据:", response.data);
    })
    .catch(function (error) {
      console.log(error);
    });
}, [query.token]); // 依赖query.token,token变化时自动重新发起请求

// 监听Datas状态变化,打印最新值
useEffect(() => {
  console.log("Data:", Datas);
}, [Datas]);

额外建议(Next.js 13+ App Router场景)

如果是用App Router的项目,更推荐用useSearchParams来获取URL参数,它的参数解析时机更稳定:

import { useSearchParams } from 'next/navigation';

// 在组件内使用
const searchParams = useSearchParams();
const token = searchParams.get('token');

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 17:30:00