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"。
}
相关推荐
布局呆星16 小时前
Vue Router :基础使用与嵌套路由实战
前端·javascript·vue.js
想成为优秀工程师的爸爸21 小时前
第十九篇技术笔记:UDP——相思传得快,飞鸽传书在
笔记·网络协议·tcp/ip·udp·信息与通信
谁呛我名字1 天前
JavaScript 类型转换与运算规则
javascript
冰暮流星1 天前
javascript事件案例-全选框案例
服务器·前端·javascript
Dillon Dong1 天前
【系列主题】Next.js 16 + Turbopack 的暗礁:深入剖析 Tailwind v4 的 CSS 模块解析陷阱
javascript·css·容器·turbopack
糯米团子7491 天前
Web Worker
开发语言·前端·javascript
freewlt1 天前
React Server Components 深度解析
前端·react.js·前端框架
我命由我123451 天前
JavaScript 开发 - 获取函数名称、获取函数参数数量、获取函数参数名称
开发语言·前端·javascript·css·html·html5·js
Yeh2020581 天前
cookie与Session笔记
笔记
d111111111d1 天前
STM32-UART封装问题解析
笔记·stm32·单片机·嵌入式硬件·学习·算法