React Router v7数据模式使用指南

React Router官方文档:https://reactrouter.com.cn/

react-router中路由模式分为:框架模式数据模式声明式模式

以下仅为 * 数据模式 * 的使用笔记

  1. 安装 当前版本v7
js 复制代码
npm install react-router
  1. 使用createBrowserRouter创建路由配置,支持普通路由和嵌套路由。router/index.js
javascript 复制代码
import { createBrowserRouter } from "react-router";
import Index from "@/pages/Index";
import User from "@/page/User";
import Login from "@/page/Login";

const router = createBrowserRouter([
    // 普通路由
    {
        path: "/",
        Component: Index,
    },
    // 嵌套路由
    {
        path: "/user",
        Component: User,
        children: [
            {
                // path: "login",
                index: true,// 默认路由
                Component: Login,
            },
            {
                path: "register",
                Component: Register,
            },
        ]
    }
]);

export default router;
  1. 使用RouterProvider绑定路由 main.js
javascript 复制代码
import { RouterProvider } from "react-router/dom";
import router from "./router/index.js";

createRoot(document.getElementById("root")).render(
  <StrictMode>
    <Provider store={store}>
      {/* <App /> */}
      {/* 绑定路由 */}
      <RouterProvider router={router} />
    </Provider>
  </StrictMode>
);

组件内通过Outlet展示子路由,Link/NavLink实现导航

javascript 复制代码
import { Outlet, Link  } from "react-router";

export default function User() {
  return (
    <div>
      <h1>用户</h1>
      <Link to="/user">登录</Link>
      <Link to="/user/register">注册</Link>
      {/* 二级路由出口 */}
      <Outlet />
    </div>
  );
}
  1. 路由导航
  • 4.1 Link
javascript 复制代码
import { Link } from "react-router";

<Link to="/">首页</Link>
<Link to="/about">关于</Link>
  • 4.2 NavLink 需要渲染活跃和待处理状态的导航链接
javascript 复制代码
import { NavLink } from "react-router";

<NavLink
  to="/messages"
  className={({ isActive, isPending, isTransitioning }) =>
    [
      isPending ? "pending" : "",
      isActive ? "active" : "",
      isTransitioning ? "transitioning" : "",
    ].join(" ")
  }
>
  Messages
</NavLink>
  • 4.3 Form
javascript 复制代码
<Form action="/search">
  <input type="text" name="q" />
</Form>
  • 4.4 重定向redirect
javascript 复制代码
import { redirect } from "react-router";

export async function loader({ request }) {
  let user = await getUser(request);
  if (!user) {
    return redirect("/login");
  }
  return { userName: user.name };
}
javascript 复制代码
import { useNavigate } from "react-router";

export function useLogoutAfterInactivity() {
  let navigate = useNavigate();

  useFakeInactivityHook(() => {
    // navigate("/logout");
    // 使用navigate函数并设置replace为true来替换当前历史记录
    navigate("/logout", { replace: true });
  });
}
javascript 复制代码
// 4.6.1 searchParams传参
navigate("/user?id=123");

// 取
const [params]= useSearchParams();
let id= params.get("id");

// 4.6.2 params传参
navigate("/user/123");

// 取
const [params]= useParams();
let id= params.id;

Hooks解析

useLocation: 返回当前的 Location,包含有关 URL 路径的信息,以及可能的一些任意状态和键。

javascript 复制代码
// 属性
{
    "pathname": "/index", // URL 路径名,以 / 开头。
    "search": "", // URL 查询字符串,以 ? 开头。
    "hash": "", // URL 片段标识符,以 # 开头。
    "state": null, // 与此 location 关联的任意数据值。
    "key": "f5ecz0os" // 与此 location 关联的唯一字符串。 可用于在其他存储 API(如 localStorage)中安全地存储和检索数据。注意:此值在初始 location 上始终为 "default"。
}
相关推荐
Upsy-Daisy9 小时前
AI Agent 项目学习笔记(二):Spring AI 与 ChatClient 主链路解析
人工智能·笔记·学习
杨浦老苏10 小时前
AI原生笔记应用Tolaria
笔记·ai·markdown·obsidian
中屹指纹浏览器11 小时前
浏览器网络栈隔离技术研究:TCP/IP底层指纹生成与规避原理
经验分享·笔记
sulikey11 小时前
个人Linux操作系统学习笔记2 - gcc与库的理解
linux·笔记·学习·操作系统·gcc·
张元清11 小时前
useEffect 之外:专门处理异步、深比较和 SSR 的 Effect Hook
前端·javascript·面试
XinZong12 小时前
OpenClaw 中最经典的 6 款skill,真正能进工作流的 skills
javascript·后端
XinZong12 小时前
2026 AI社交深度评测:InStreet 与 ClawReach 核心差异解析
javascript
愚昧之山绝望之谷开悟之坡12 小时前
什么是Linter?什么是沙箱!
linux·笔记
菜鸡儿齐12 小时前
编程范式学习笔记
笔记·学习
Bug-制造者13 小时前
【Vue3 实战】全局错误处理体系搭建:实现业务与错误彻底解耦
前端·javascript·vue.js