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

news2024/11/14 19:41:05

目录

一、运行时配置

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相关内容,并且最后也会做一个完整的项目,相当于练手,大家敬请期待!!!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/593792.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Geohash算法原理及实现

最近需要实现一个功能,查找车辆附近的加油站,如果车和加油站距离在200米以内,则查找成功。 加油站数量肯定不小,能否缩小查找范围,否则以遍历形式,效率肯定高不了。 Geohash算法就是将经纬度编码&#xf…

又名管道和无名管道

一、进程间通信(IPC,InterProcess Communication) 概念:就是进程和进程之间交换信息。 常用通信方式 无名管道(pipe) 有名管道 (fifo) 信号(signal) 共…

数字化时代,低代码+进销存管理系统让你省时省力

进销存系统是一种用于管理企业物资流动和库存的软件系统,可以帮助企业优化物资管理过程,提高效率,减少成本,从而提升企业的盈利能力。本文将详细介绍进销存系统的定义、功能、好处以及如何选择适合自己企业的进销存系统&#xff0…

【嵌入式烧录/刷写文件】-2.6-剪切/保留Intel Hex文件中指定地址范围内的数据

案例背景: 有如下一段HEX文件,保留地址范围0x9140-0x91BF内的数据,删除地址范围0x9140-0x91BF外的数据。 :2091000058595A5B5C5D5E5F606162636465666768696A6B6C6D6E6F70717273747576775F :2091200078797A7B7C7D7E7F808182838485868788898A…

「ACL 2023」发榜!火山语音推出业内首个借助视频信息的端到端语音翻译模型

日前 ACL 2023的论文录用结果公布,火山语音团队多篇论文成功入选,内容涵盖音频合成、歌声合成以及语音翻译等多个前沿技术领域的创新突破。ACL(Annual Meeting of the Association for Computational Linguistics)每年由国际计算语…

Nginx服务器及其配置与应用

目录 一、Nginx的特点 1.高并发 2.低消耗 3.低消耗 4.高可用 5.高扩展 6.Nginx与Apache的差异 7.Nginx与Apache的区别 二、Linux中的I/O 1.I/O介绍 2.同步/异步 3.阻塞/非阻塞:关注调用者在等待结果返回之前所处的状态 三、编译安装Nginx服务 1.关闭防火墙&#…

SOLIDWORKS安装使用说明网络版

安装准备 系统要求:参考https://www.solidworks.com/sw/support/SystemRequirements.htmlSolidWorks 2017 是最蕞后一个支持win server 2008 R2 sp1的软件。 SolidWorks 2018支持win server 2012及以上的系统,但不支持win server 2019 SolidWorks 2019…

HNU-计算机系统-CSAPP作业答案

计算机系统CSAPP课后作业答案 计科210X wolf 202108010XXX 第2章 2.61 解: (!~x) || (!x) || (!~(x|0x00ffffff)) || (!(x&0x000000ff)) 或者: (!~x) || (!x) || (!~(x>>24)) || (!(x<<24)) 2.71 A. 实现的是逻辑位移,扩展后前面全是0,不符合符号扩…

Linux常见命令学习

目录 1.ls2.pwd3.cd (change directory)4.touch&&cat&&echo5.mkdir&&rm6.cp&&mv7.man8.less&&vim 1.ls 列出当前目录中包含的文件和目录~ 类似于在windows上双击某个目录&#xff0c;把他打开&#xff0c;看看目录里有啥~ ls -> l…

企业内容管理丨如何解决企业客户签收回执慢,缩短回款周期?

方案应用领域及行业 本方案适用于快消品行业的供应链管理和财务管理 方案应用背景 由于动产物权的政策变化&#xff0c;物权转移从交付时才开始发生效力。也就是说&#xff0c;新政之前&#xff0c;企业发出商品&#xff0c;开出销售发票&#xff0c;即可申请货物回款&#…

C# webapi接口传输byte[]数据,报错:415 Unsupported Media Type

最近需要做上传文件操作。 由于历史原因&#xff0c;以前的接口使用了这样的入参&#xff1a; 代码如下&#xff1a; /// <summary> /// 上传文件 /// </summary> [HttpPost] public Result<UploadImageResult> UploadFile(byte[] bytes, string extName, s…

html框架-----标签(上)

目录 前言&#xff1a; 标签简介 1. HTML的基本结构 (1)html标签 (2)head标签 &#xff08;3&#xff09;body标签 2. 标题标签 3. 段落标签 4. 文本格式化标签 前言&#xff1a; 现在学前端工程师的都很难找工作&#xff0c;懂的都懂了&#xff0c;因为学前端一般去做那…

console.log是异步还是同步?为什么console.log有时候不准

console.log是异步还是同步 在前端开发中&#xff0c;控制台console.log通常是同步的。这意味着&#xff0c;当代码执行到console.log语句时&#xff0c;它会立即写入到控制台中&#xff0c;并且JavaScript代码执行会在console.log完成后继续进行。 但是&#xff0c;在某些情况…

# croc用法实践(设备间文件或文件夹传输)

croc用法实践&#xff08;设备间文件或文件夹传输&#xff09; 文章目录 croc用法实践&#xff08;设备间文件或文件夹传输&#xff09;1 安装2 使用示例2.1 发送文件2.2 发送文件夹2.3 发送文本字符串2.4 发送时指定code&#xff0c;接收时自动【Y】&#xff0c;并保存到指定目…

《MySQL(一):基础篇-MySQL概述》

文章目录 1. MySQL概述1.1 数据库相关概念1.2 MySQL数据库1.2.1 版本1.2.2 下载1.2.3 安装1.2.4 启动停止1.2.5 客户端连接1.2.6 数据模型1. MySQL概述 1.1 数据库相关概念 先来了解三个概念:数据库、数据库管理系统、SQL。 而目前主流的关系型数据库管理系统的市场占有率…

ic验证的主要工作流程和验证工具是什么?

验证其实是一个“证伪”的过程&#xff0c;从流程到工具&#xff0c;验证工程师的终极目的都只有一个&#xff1a; 发现所有BUG&#xff0c;或者证明没有BUG&#xff0c;以保证芯片功能性能的正确性和可靠性。 验证环节对于一颗芯片的重要性也是不言而喻的&#xff1a; 从项…

VMware16安装Linux CentOS7完整教程(附下载地址)

一、准备工作 1.安装VMware Workstation Pro 16 &#xff08;1&#xff09;百度网盘下载地址 链接:https://pan.baidu.com/s/1jv0kQ26TLMt9MzofImRzgA?pwds0m1 提取码&#xff1a;s0m1 &#xff08;2&#xff09;VMware官网 https://www.vmware.com/cn &#xff08;2&#x…

广通优云徐育毅:筑基数字化,打造中国IT运维新范式

2023年2月&#xff0c;中共中央、国务院印发《数字中国建设整体布局规划》&#xff0c;数字技术与经济、政治、文化、社会等各领域融合愈发紧密&#xff0c;一册百花齐放、生机勃勃的数字化图卷正徐徐展开。 随着数字中国战略深入推进&#xff0c;IT运维作为核心领域受到关注。…

傻瓜式git管理。全平台,全编译器通用。github desktop+vscode

文章目录 前言Github desktop资源地址推荐理由操作介绍打开界面介绍Github账号登录Github仓库导入 从零开始新建Gitee仓库登录或注册gitee仓库Gitee新建仓库输入仓库名&#xff0c;添加gitignore,Readme什么是.gitignore什么是README 新建仓库效果github desktop使用新建本地仓…

Android播放器拖动进度条的小图预览

Android播放器拖动进度条的小图预览 背景效果图关键代码1. 获取指定位置的视频帧2. 预览图的显示和隐藏 完整代码1. xml布局文件activity_video.xml2. Activity文件VideoActivity.java 背景 我们在使用一些播放器时&#xff0c;拖动进度条会有一个预览框&#xff0c;上一篇博客…