【商城后台管理系统】项目初始化(UmiJS)

2023-10-30

目录

一、运行时配置

1.1 配置方式

1.2 常用配置项

1.3 关于运行时配置说明

二、使用Umi UI

2.1 Umi UI的特性

2.2 项目中安装Umi UI

2.3 使用Umi UI

三、Umi JS总结

3.1 路由状态管理

3.2 配置代理

3.3 封装requset

一、运行时配置

        运行时配置和配置的区别是他跑在浏览器端,基于此,我们可以在这里写函数、jsx、import浏览器端依赖等等,但是不要在这里引入node依赖。

1.1 配置方式

     约定写在src/app.tsx文件夹为运行时配置。

1.2 常用配置项

    (1)动态修改路由patchRoutes({ routes })—路由权限管理

        比如在最前面添加一个 /foo 路由,

export function patchRoutes({ routes }) {
  routes.unshift({
    path: '/foo',
    exact: true,
    component: require('@/anth/foo').default,
  });
}

       比如和 render 配置配合使用,请求服务端根据响应动态更新路由

let extraRoutes;

export function patchRoutes({ routes }) {
//合并服务端返回的路由
  extraRoutes.map(item => {
     routes.unshift({
     path: item.path,
     component: require(`@/pages${item.component}`).default
     })
  })
}

// 覆写render会在patchRoutes之前执行
export function render(oldRender) {
  // 模拟从服务器端获取数据
  extraRoutes=[
   {path: '/server', component: 'user'}
  ]

  // 渲染之前,做一些权限校验
  fetch('/api/auth').then(auth => {
    if (auth.isLogin) { oldRender() }
    else { 
      history.push('/login'); 
      oldRender()
    }
}

注意:

  • 直接修改routes,不需要返回

(2)render(oldRender:Function)—路由权限校验

        在patchRoutes之前执行

import { history } from 'umi';

export function render(oldRender) {
  fetch('/api/auth').then(auth => {
    // 如果用户没有登陆,跳转到登陆页面
    if (auth.isLogin) { oldRender() }
    else { 
      history.push('/login'); 
      oldRender()
    }
  });
}

(3)onRouteChange({ routes, matchedRoutes, location, action })在初始加载和路由切换时做一些事情

        在patchRoutes之后执行

比如用于做埋点统计

export function onRouteChange({ location, routes, action }) {
  bacon(location.pathname);
}

比如用于设置标题

export function onRouteChange({ matchedRoutes }) {
  if (matchedRoutes.length) {
    document.title = matchedRoutes[matchedRoutes.length - 1].route.title || '';
  }
}

1.3 关于运行时配置说明

  • 上述配置项只是UmiJS在运行时配置的常用配置项,当然还有其他配置项
  • Umi 允许插件注册运行时配置,如果你使用插件,肯定会在插件里找到更多运行时的配置项(每一个插件也会有自己的配置项)

运行时配置https://v3.umijs.org/zh-CN/docs/runtime-config

二、使用Umi UI

    2.1 Umi UI的特性

  • 项目管理。集中式管理本地项目。
  • 配置管理。umi / bigfish 常用项目配置。
  • 任务管理。集成启动、构建、测试、代码规范检查、重新安装依赖等常用操作。
  • 资产、区块管理

    2.2 项目中安装Umi UI

         在项目中使用命令

下载Umi UI依赖:yarn add @umijs/preset-ui -D

使用Umi UI:UMI_UI=1 umi dev

注意:这里如果出现无法识别UMI_UI,可以将他配置到package.json中)

"scripts": {
    "start:umi-ui": "set UMI_UI=1 && umi dev",
  },

    2.3 使用Umi UI

        在上述步骤安装成功后,我们访问我们本地的8000接口,在右下角会出现一个按钮,点击他即可使用Umi UI。

三、Umi JS总结

        看到这里,我们的UmiJS的学习也要告一段落了,但是在实际开发过程中,为了让项目结构更加清晰,我们都会将我们的代码根据功能进行文件区分,然后以引入的方式使用。

        在UmiJS配置相关介绍中我们知道:UmiJS的配置是在.umirc.js或者config/config.ts中配置的,所以我们将.umirc.js中的配置分出来。注意:.umirc.js的优先级是高于config/config.ts的,所以我们要将.umirc.js删掉,重新配置config/config.ts。

        3.1 路由状态管理

config/routes.ts(专门存放路由)

export default [
  {
    name: '注册页',
    path: '/userregister',
    component: './UserRegister',
  },
  {
    path: '/',
    component: '@/layouts/LayoutSide/index',
    routes: [
      {
        name: '空白页面',
        path: '/user',
        component: './User',
      },
      {
        path: '/',
        component: '@/pages/index',
      },
    ],
  },
]

config/config.ts(引入路由)

import routes from './routes'

        3.2 配置代理

config/proxy.ts(专门存放代理相关)

export default {
  //dev环境
  dev: {
    proxy: {
    '/api': {
      'target': 'http://jsonplaceholder.typicode.com/',
      'changeOrigin': true,
      'pathRewrite': { '^/api' : '' },
    },
   },
  }
  //test环境
   test: {
    proxy: {
    '/api': {
      'target': 'http://jsonplaceholder.typicode.com/',
      'changeOrigin': true,
      'pathRewrite': { '^/api' : '' },
    },
   },
  }
  
}

config/config.ts(引入)

import proxy from './routes'

export default defineConfig({
  proxy: proxy[APP__ENV || 'dev'],
});

        3.3 封装requset

        由于request这个插件,我们可能会在多出使用到他,并且会用到拦截器、错误处理的相关东中间件,所以我们将他预先封装起来,方便我们后续使用

GitHub - umijs/umi-request: A request tool based on fetch.A request tool based on fetch. Contribute to umijs/umi-request development by creating an account on GitHub.https://github.com/umijs/umi-request#interceptor

src/utils/request.ts

import request from "umi-request"
import { message } from "antd"
// 请求拦截器
request.interceptors.request.use((url, options) => {
  return {
    url: `${url}&interceptors=yes`,
    options: { ...options, interceptors: true },
  };
});

// 响应拦截器
request.interceptors.response.use(response => {
  const codeMaps = {
    502: '网关错误。',
    503: '服务不可用,服务器暂时过载或维护。',
    504: '网关超时。',
  };
  message.error(codeMaps[response.status]);
  return response;
});

export default request

         到此为止,关于UmiJS的初步了解我们也就结束了,之后会跟大家分享Antd Pro相关内容,并且最后也会做一个完整的项目,相当于练手,大家敬请期待!!!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【商城后台管理系统】项目初始化(UmiJS) 的相关文章

  • 移动设备上的剩余悬停效果

    我一整天都在努力做这个JSFiddle http jsfiddle net gsamaras q2w4jjyt 4 也适用于手机 但我所有的尝试都没有效果 在桌面上 当用户将鼠标悬停在箭头上时 它会变成红色 在移动设备上 当用户触摸 为了单
  • 通过 beautiful soup python 找到所有字体大小大于最常见字体的跨度样式

    我了解如何从特定的位置获取文本div or span这个问题的风格 如何找到最常见的跨度样式 https stackoverflow com questions 40762692 is there a way to find the mos
  • Java 的 React Typescript API 类型 byte[] image/png

    我正在将其转换为我们的 React Web 应用程序的 Typescript 服务 下面是 Java 中的原始 API Typescript 响应数据类型是什么 斑点 GET Path vendorId Photo Produces ima
  • 将 h2 标签嵌套在另一个带有 h1 标签的标头中在语义上是否错误?

    将 h2 标签嵌套在另一个标头 h1 标签内在语义上是否错误 h1 class fixed h2 class absolute Absolute Div h2 h1 语义错误 很大程度上是一个观点问题 语义 意味着 与意义相关 但这里的含义
  • 单击行内的按钮时防止触发表行 onclick 事件

    我有一个带有 ONCLICK 事件的表行 切换下面的附加数据 在其中一个行单元格内有一个按钮 单击时执行 AJAX 操作 当我单击按钮时 行的 onclick 事件也会触发 并且会发生附加数据在 AJAX 调用完成之前出现 这对我来说是一个
  • 将 async 和await 与export const 一起使用

    我无法完成这项工作 它说 await 是一个保留字 是的 当然是 而且我想使用它 怎么了 export const loginWithToken async gt return dispatch gt dispatch type SESSI
  • html 表:thead 与 th

    它看起来像 根据示例这一页 http www w3 org TR html4 struct tables html无论如何 如果您使用THEAD 则不需要使用TH 真的吗 如果是这样 THEAD 与 TH 相比有何优点 缺点 The the
  • 滚动时多个图像淡出

    我有一个页面 在每个导航点上 网站中间的图像通过淡入淡出来改变颜色 我设法淡入 active3 fadeIn 2000 不过 我遇到了再次淡出它的问题 让我尝试解释一下 我有 5 个导航点和 5 个不同的图像 如果我 例如 从第一个导航点滚
  • 如何使用CSS缩进多级select optgroup?

    只是试图通过嵌套深度缩进 optgroup 块 我尝试了一般margin left规则 嵌套元素然后尝试应用相同的规则 尝试过padding left 这样的缩进可能吗 看起来很简单 P 在下面的示例中 标记为 client2 a 的 op
  • 将 Bootstrap CSS 中的列表居中[重复]

    这个问题在这里已经有答案了 重复报告后编辑 抱歉 我认为建议的重复项实际上可能是重复项 我先尝试了一下 但它对我不起作用 因此出现了一个新问题 再次查看新的建议答案后 我意识到我的问题可能与我正在使用的工具 codepen io 的开箱即用
  • 将 Regex 对象分配给 html 输入模式

    我需要以编程方式将正则表达式对象分配给输入元素模式属性 以下是我当前的实现 var regex d 5 element attr pattern regex toString slice 1 1 有没有更好的方法来做到这一点而不需要字符串操
  • 重新加载页面时删除哈希值?

    我使用哈希来切换我的图像滑块 当我重新加载页面并且哈希值设置为 e h 3 没有图片 当图库在几秒钟后自动滑动时 它显示下一个 所以几秒钟内什么也没有 有没有办法在加载页面时检查哈希并将其删除 我只想关心那些用散列为页面添加书签的人 问候
  • 同一元素上的“itemprop”和“rel”属性

    使用是否有效itemprop属性and the rel同一元素上的属性 示例来自Google 的站点名称文档 https developers google com search docs data types sitename包含 这给出
  • 从选择 onChange 调用 javascript 函数 [重复]

    这个问题在这里已经有答案了 所以我有一个简单的 HTML 选择框和一个 javascript 警报功能 我希望选择框有一个 onchange 事件来调用 javascript 警报函数 这是我到目前为止所拥有的 HTML div Type
  • Heroku、NodeJs 和 React 问题:SCRIPT5007:无法获取未定义或空引用的属性“应用”

    我猜我对 Polyfill 有一个奇怪的问题 我在我的应用程序中使用了 MERN stack 并推送到了 Heroku 由于某种原因 在我的 Chrome 计算机上我可以查看该网站 但是 在其他计算机上我收到空白页面并在控制台中出现错误 S
  • Ant design Tabs onClick 函数

    我使用 Ant 设计创建了选项卡 在第二个选项卡中 当我单击我想要触发的按钮或更改为第一个选项卡时 有一个按钮 这是我的代码
  • Bootstrap 4 移动导航栏消失

    我刚刚从 Bootstrap 3 转换为 Bootstrap 4 但我的移动导航栏出现问题 使用切换按钮展开导航栏时 导航消失 我不明白为什么会发生这种情况 导航栏下方有一个大屏幕 但整个移动导航向上移动 如下面的 gif 所示 以下是导航
  • HTML5 文件 API 和 AJAX 上传分块问题

    我编写了一个带有单独进度的拖放多个文件上传等 除了一件事之外 它工作得非常好 上传较大文件时 有时浏览器会锁定 直到上传完成 我认为这是因为该文件存储在浏览器的内存中并占用了浏览器可用的所有资源 我想知道 是否可以逐段读取文件并在读取时通过
  • 从字节数组设置 img src

    我需要设置img src我在对象中拥有的字节数组的属性 img
  • 轮播滑动(未滑动)事件上的火灾事件,Bootstrap 3

    Bootstrap 2 似乎可以很好地处理幻灯片事件 请参阅这个问题 https stackoverflow com questions 9651466 how to attach slide slid events to the boot

随机推荐

  • CSS重构

    1 重构和架构 重构是指在不改变代码行为的前提下 重写代码 使其更加简洁 易于复用 架构是指软件项目的各个不同部件之间的组合方式 优秀的架构 可预测 可以对软件的工作方式和结构做出准确的假设 可复用 在多处使用同一代码 无需重写 可扩展 比
  • 索引 第2关:用alter table创建索引

    任务描述 使用ALTER TABLE语句 1 为product商品表的descn商品详情的前两个字符和catid目录编号列添加索引descn catid 2 为product商品表的name商品名列添加唯一性索引unique name 3
  • qt自定义控件-多类别提示框

    一 前言 用惯了自带的messagebox 或者感觉效果不是很好看 或者有界面的特殊美观需求等等 那么就定制吧 1 单选项提示框 2 双选项提示框 3 滚动选项提示框 4 密码提示框 5 多组合选项提示框1 6 多组合选项提示框2 7 多组
  • 【华为OD机试真题2023 JS】快递投放问题

    华为OD机试真题 2023年度机试题库全覆盖 刷题指南点这里 快递投放问题 知识点图BFS搜索 时间限制 1s 空间限制 256MB 限定语言 不限 题目描述 有N个快递站点用字符串标识 某些站点之间有道路连接 每个站点有一些包裹要运输 每
  • java.lang.RuntimeException: com.intellij.ide.plugins.PluginManager

    描述 在mac电脑上的Android Studio 因为项目需求 加载plugins中的dart和Flutter插件 经过科学上网后 依然无法从AS中加载进来 曲折到Jetbrains官网下载了dart和Flutter的插件包 再引入到AS
  • PyCharm常用快捷键

    00 万能搜索 可以搜索文件名 类名 方法名 还可以搜索目录名 搜索目录的技巧是在在关键字前面加斜杠 Double Shift 01 代码智能提示 由于PyCharm默认的代码智能提示是 Ctrl Space 但是因为Ctrl Space是
  • LESS-23 LESS-25 LESS-25a

    LESS 23 源码 以此可知可以通过报错注入等方式 语法 mixed preg replace mixed pattern mixed replacement mixed subject int KaTeX parse error Exp
  • docker应用安装之部署Springboot项目

    docker部署springboot项目分为以下2步 springboot项目的JAR包生成镜像文件 将镜像文件生成容器 并完成部署 一 springboot项目的JAR包生成镜像文件 编写Dockerfile文件 执行以下命令 mkdir
  • 谷歌翻译插件Translate Web Pages

    官方下载页 https github com FilipePS Traduzir paginas web releases Chrome 谷歌浏览器 下载 TWP x x x Chromium zip Chrome安装扩展 配置 使用的操作
  • sqlcmd是个好玩意儿

    文章目录 sqlcmd是什么 sqlcmd命令 使用实例 使用sqlcmd创建数据 执行sql语句 sqlcmd是什么 sqlcmd真是开发者的福利 有了这玩意儿之后 数据库的部署 与数据库相关的一些自动化工作忽然简单了好多 也算是一个神器
  • 成绩分析(蓝桥杯)

    成绩分析 题目描述 小蓝给学生们组织了一场考试 卷面总分为 100 分 每个学生的得分都是一个 0 到 100 的整数 请计算这次考试的最高分 最低分和平均分 输入描述 输入的第一行包含一个整数 n 1 n 104 表示考试人数 接下来 n
  • 回溯算法 解题思路

    文章目录 算法介绍 回溯算法能解决的问题 解题模板 1 组合问题 2 N皇后问题 算法介绍 回溯法 Back Tracking Method 探索与回溯法 是一种选优搜索法 又称为试探法 按选优条件向前搜索 以达到目标 但当探索到某一步时
  • vs qt 无法打开包括文件: “QtCore/qconfig.h”

    编译环境的不同导致的问题 定位到 ifdef QT BOOTSTRAPPED include
  • PyTorch环境配置:UserWarning: CUDA initialization: The NVIDIA driver on your system is too old

    错误 UserWarning CUDA initialization The NVIDIA driver on your system is too old found version 9010 Please update your GPU
  • 图数据库实践系列 (二)--Neo4J空间数据存储

    上讲回顾 介绍了Neo4j的概念和安装 同时包括介绍了Git和Maven两个工具 本文会介绍Neo4j Spatial项目以及空间数据 矢量 的存储 1 Neo4j Spatial 简介 1 1Neo4j Spatial概念 Neo4j S
  • 【雷达原理】雷达信号级建模与仿真

    目录 前言 一 LFMCW信号概述 1 1 优点 1 2 缺点 二 LFMCW信号模型 2 1 发射信号模型 2 2 接收信号模型 2 3 信号混频 三 MATLAB仿真 3 1 仿真结果 3 2 代码 四 参考文献 前言 雷达信号形式多种
  • 怎么查ip地址 多种方法教学

    我们在使用电脑的时候 有时候需要查询自己电脑的ip地址 那么这时候很多人会束手无策 那么接下来 IP数据云小编就为大家介绍一下怎么去查询自己电脑的ip地址 供大家在实际生活的时候参考使用 一 通过网页进行查询 可以通过第三方平台进行查询 比
  • TypeScript的一些安装、转换、热更新等配置方法

    安装 首先得有node然后在文件目录中git bash 输入npm i g typescript 安装成功后输入tsc测试是否安装成功 ts转js 浏览器不认识ts需要将ts转换为js让浏览器进行编译 在当前目录下git bash输入 ts
  • STM32F4驱动4路VL53L0测距

    最近给朋友调试了STM32F407驱动VL53L0的激光测距 安装在机器人上的 遇到一些问题 这里发帖纪录一下 关于VL53L0的资料和代码在正点原子那里都有 但是正点原子只是驱动了一路VL53L0 很多问题都需要我们自己解决 一路的VL5
  • 【商城后台管理系统】项目初始化(UmiJS)

    目录 一 运行时配置 1 1 配置方式 1 2 常用配置项 1 3 关于运行时配置说明 二 使用Umi UI 2 1 Umi UI的特性 2 2 项目中安装Umi UI 2 3 使用Umi UI 三 Umi JS总结 3 1 路由状态管理