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"。
}
相关推荐
清风徐来QCQ15 分钟前
SpringMvC
前端·javascript·vue.js
im_AMBER16 分钟前
Leetcode 99 删除排序链表中的重复元素 | 合并两个链表
数据结构·笔记·学习·算法·leetcode·链表
创作者mateo17 分钟前
PyTorch 入门笔记配套【完整练习代码】
人工智能·pytorch·笔记
Swift社区25 分钟前
ArkTS Web 组件里,如何通过 javaScriptProxy 让 JS 同步调用原生方法
开发语言·前端·javascript
米汤爱学习26 分钟前
stable-diffusion-webui【笔记】
笔记·stable diffusion
创作者mateo1 小时前
PyTorch 入门学习笔记(基础篇)一
pytorch·笔记·学习
Hi_kenyon1 小时前
快速入门VUE与JS(二)--getter函数(取值器)与setter(存值器)
前端·javascript·vue.js
3秒一个大1 小时前
模块化 CSS:解决样式污染的前端工程化方案
css·vue.js·react.js
全栈前端老曹1 小时前
【前端路由】React Router 权限路由控制 - 登录验证、私有路由封装、高阶组件实现路由守卫
前端·javascript·react.js·前端框架·react-router·前端路由·权限路由
hkNaruto1 小时前
【AI】AI学习笔记:关于嵌入模型的切片大小,实际的业务系统中如何选择
人工智能·笔记·学习