taro移动端项目配置路由拦截器

taro移动端项目配置路由拦截器

前言

个人开源的leno-admin后台管理项目,前端技术栈:reactHooksant-design;后端技术栈:koamysqlredis,整个项目包含web端electron客户端mob移动端template基础模板,能够满足你快速开发一整套后台管理项目;如果你觉得不错,就为作者点个✨star✨吧,你的支持就是对我最大的鼓励;

演示地址

文档地址

源码github地址

事因

最近在闲暇时间之余,便开始着手于开发我自己个人的开源项目leno-admin的移动端,包含移动端h5页面和微信小程序,也遇到了不少taro的坑,在路由拦截上无法直接套用web端的路由拦截,又因为需要兼容小程序端,索性便自己封装一个路由拦截器,下面便直接上代码!

封装RouterMonitor组件

我们在components中封装一个组件,接收唯一一个传值,就是url当前路径的传值,然后将该组件在入口文件app.tsx中引入,每一次页面的变化,都会触发App组件,从而达到触发我们自己封装的路由拦截器,然后就将拦截逻辑写在组件中即可;

tsx 复制代码
// components/RouterMonitor.tsx 
import Taro from "@tarojs/taro";

// url为app.tsx传入的当前页面的路径
const RouterMonitor = (props: { url: string }) => { 
  const token = Taro.getStorageSync("leno-admin-mob-token");
  const { url } = props;
  // pages是所有页面在的主文件夹下面,所有配置在app.config.ts中的路由路径都是pages开头,
  // 可根据自己项目进行修改;
  const handleUrl = url.split("pages")[1]?.split("?")[0];
  // router-path是上一层路由的页面
  let routerPath = Taro.getStorageSync("router-path");

  if (token) {
    // 有token去login
    if (handleUrl === "/login/index" || handleUrl === "/" || !handleUrl) {
      Taro.switchTab({
        url: routerPath as string,
      });
    } else {
      // 非登录页面才需要存储路由路径
      Taro.setStorage({
        key: "router-path",
        data: "/pages" + handleUrl,
      });
    }
  } else {
    if (handleUrl !== "/login/index" && handleUrl !== "/") {
      Taro.redirectTo({
        url: "/pages/login/index",
      });
    }
  }

  return <></>;
};

export default RouterMonitor;

app.tsx

tsx 复制代码
// app.tsx
import { FC, ReactNode } from "react";
import "taro-ui/dist/style/index.scss";
import "./app.scss";
import "~/assets/icons/iconfont.scss";
import RouterMonitor from "./components/RouterMonitor";
interface AppProps {
  children: ReactNode;
}

const App: FC<AppProps> = ({ children }) => {
  return (
    <div>
      // 调用时传入当前页面路由路径
      <RouterMonitor url={window.location.href} />
      {children}
    </div>
  );
};

export default App;
相关推荐
show4334 小时前
2026微信小程序视频转文字多语种识别引擎技术选型:22种方言25种外语挑战
微信小程序·小程序·音视频
MrFlySand_飞沙13 小时前
uniapp开发微信小程序实现接入企业微信客服
微信小程序·小程序·uni-app·企业微信
不好听61313 小时前
TypeScript 面试必会:工具类型全家桶,从 keyof 到手写 Partial
面试·typescript
码艺-Alimjan13 小时前
JWT 的本质、误区与正确落地:一套不依赖任何框架的架构方法论-微信小程序代码案例-Api 安全性拉满
微信小程序·架构·notepad++
禁止摆烂_才浅13 小时前
微信小程序高频面试题
前端·面试·微信小程序
嘟嘟071713 小时前
从入口到 CRUD:用 NestJS 的模块化与装饰器思想读懂一个后端应用
后端·typescript·nestjs
嘟嘟071713 小时前
TypeScript 工具类型通关:Pick、Omit、Partial、Record 区别与 Omit 等价实现一次讲清
设计模式·面试·typescript
何时梦醒13 小时前
TypeScript 工具类型一篇讲透:Pick、Omit、Partial、Exclude、Record、ReturnType、keyof
前端·面试·typescript
小林ixn13 小时前
TS 工具类型实战:Pick/Omit/Partial/Record 一次讲透,别再 Omit 反了
typescript·代码规范
苏灿烤鱼13 小时前
十个 CLI 坐进一间办公室,协调层靠得住吗?
typescript·github·agent