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

NextRouter调用refresh()报错:属性不存在问题求助(附代码)

解决Next.js中router.refresh()不存在的类型错误

问题原因

你遇到的错误是因为Next.js路由API版本不匹配:

  • next/router是Pages Router(旧路由系统)的API,它的NextRouter类型确实没有refresh()方法。
  • refresh()是App Router(Next.js 13+推出的新路由系统)中useRouter的专属方法,需要从next/navigation导入。

解决方案

1. 切换路由API导入路径

将组件中的useRouter导入从next/router改为next/navigation:

// 替换前
import { useRouter } from "next/router";

// 替换后
import { useRouter } from "next/navigation";

2. 补充表单默认行为阻止(可选但推荐)

原代码未阻止表单默认提交行为,会导致页面自动刷新,建议在createPrompt函数开头添加:

e.preventDefault();

修改后的完整代码

"use client";

import { useRouter } from "next/navigation";
import { useState } from "react";

export default function CreatePrompt() {
  const [title, setTitle] = useState("");
  const [content, setContent] = useState("");

  const router = useRouter();

  const createPrompt = async (e: React.FormEvent) => {
    e.preventDefault();
    await fetch("http://127.0.0.1:8090/api/collections/prompts/records", {
      method: "POST",
      headers: {
        "Content-Type": "application/json",
      },
      body: JSON.stringify({
        title,
        content,
      }),
    });

    setContent("");
    setTitle("");

    router.refresh();
  };

  return (
    <form onSubmit={createPrompt}>
      <h3>Create a new Prompt</h3>

      <input
        type="text"
        placeholder="Title"
        value={title}
        onChange={(e) => setTitle(e.target.value)}
      />

      <textarea
        placeholder="Content"
        value={content}
        onChange={(e) => setContent(e.target.value)}
      />

      <button type="submit">Save prompt</button>
    </form>
  );
}

若仍使用Pages Router

如果你的项目基于Pages Router(未启用App Router),可以用以下方式模拟页面刷新效果:

// 替换router.refresh()为:
router.replace(router.asPath);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 15:32:43