umi学习总结

news2024/11/25 20:20:14

文章目录

  • umi介绍
    • umi是什么?
  • umi的特性
    • 开发环境
      • Node.js
      • 依赖管理工具
    • 目录结构
    • 路由
      • 配置路由
    • 页面跳转
      • Link组件
    • 路由组件参数:
      • 路由动态参数
      • query信息
    • 样式
      • 使用css样式
  • dva
    • 为什么需要状态管理
    • umi如何管理状态

umi介绍

umi是什么?

Umi,中文发音为「乌米」,是可扩展的企业级前端应用框架。Umi 以路由为基础的,同时支持配置式路由和约定式路由,保证路由的功能完备,并以此进行功能扩展。然后配以生命周期完善的插件体系,覆盖从源码到构建产物的每个生命周期,支持各种功能扩展和业务需求。

umi的特性

开发环境

Node.js

Umi.js需要使用Node.js来进行开发,首先需要确保电脑已经安装了Node.js且版本在14以上。

依赖管理工具

Node安装完成后会自带npm依赖管理工具,但是Umi推荐使用
pnpm作为依赖管理工具

目录结构

在这里插入图片描述
根目录下
package.json
包含插件和插件集

.env
环境变量,比如:

PORT=8888
COMPRESS=none

.umirc.ts
与 config/config.ts文件功能相同, .umirc.ts文件优先级更高
配置文件,包含umi内置功能和插件的配置

config/config.ts
与 .umirc.ts文件功能相同,.umirc.ts文件优先级更高
配置文件,包含umi内置功能和插件的配置

dist目录
执行umi build后,产物会默认存到这里。可以通过配置修改产物的输出路径。

mock目录
存储mock文件,此目录下所有js和ts文件都会被解析为mock文件。用于本地的模拟数据服务。

public目录
此目录下所有文件会被copy到输出路径

src目录
.umi目录
dev时的临时文件目录,比如入口文件、路由等,都会被临时生成到这里。不要提交.umi目录到git仓库,他们会在umi dev时被删除并重新生成。

路由

配置路由

在配置文件中通过routes进行配置,格式是路由信息的数组。
比如

export default {
  routes: [
    { path: '/', component: 'index' },
    { path: '/user', component: 'user' },
  ],
}

path
type:字符串
path只支持两种占位符配置,动态参数 :id 的形式、* 通配符,通配符只能出现在路由字符串的最后

以下是支持的路由路径配置形式

/groups
/groups/admin
/users/:id
/users/:id/messages
/files/*
/files/:id/*

以下是不支持的路由配置形式:

/users/:id?
/tweets/:id(\d+)
/files/*/cat.jpg
/files-*

component
type:string
配置location和path匹配后用于渲染的react组件路径,可以是绝对路径,也可以是相对路径,如果是相对路径,会从 src/pages开始找起。
src可以用@代替。

routes
配置子路由,格式为路由数组
比如:

export default {
  routes: [
    { path: '/login', component: 'login' },
    {
      path: '/',
      component: '@/layouts/index',
      routes: [
        { path: '/list', component: 'list' },
        { path: '/admin', component: 'admin' },
      ],
    }, 
  ],
}

然后在src/laouts/index中通过渲染子路由

import {Outlet} from 'umi'
 
export default (props) => {
  return <div style={{ padding: 20 }}> 
    <Outlet/> 
  </div>;
}

这样,访问 /list和/admin就会带上 src/layouts/index这个layout组件。

redirect
type:string
路由重定向
比如:

export default {
  routes: [
    { path: '/', redirect: '/list' },
    { path: '/list', component: 'list' },
  ],
}

访问 / 时会重定向到 /list,并由src/pages/list 文件进行渲染。

wrappers
type:string[]
配置路由组件的包装组件,通过包装组件可以为当前的路由组件结合更多的功能。比如,可以用于路由级别的权限校验:

export default {
  routes: [
    { path: '/user', component: 'user',
      wrappers: [
        '@/wrappers/auth',
      ],
    },
    { path: '/login', component: 'login' },
  ]
}

然后在 src/wrappers/auth中

import { Navigate, Outlet } from 'umi'
 
export default (props) => {
  const { isLogin } = useAuth();
  if (isLogin) {
    return <Outlet />;
  } else{
    return <Navigate to="/login" />;
  }
}

这样,访问/user,就通过auth组件做权限校验,如果通过,渲染src/pages/user,否则跳转到 /login

title
type:string
配置路由的标题

页面跳转

使用 history 或者 useNavigate进行跳转

Link组件

比如:

import { Link } from 'umi';
 
export default () => (
  <div>
    <Link to="/users">Users Page</Link>
  </div>
);

点击 Users page 就会跳转到 /users 地址

路由组件参数:

match信息
useMatch

location信息
useLocation

路由动态参数

useParams

query信息

useSearchParams

样式

使用css样式

你可以在umi项目中使用 .css文件声明各种样式,然后在.js文件中引入即可生效。

按照此种引入方式的样式会在整个umi项目中生效,即无论你从哪个 .js文件引入,他声明的样式可以在任何页面和组件中使用。如果你想避免这种情况,可以使用 css modules的功能来限制样式的作用域

使用css Modules
在js文件中引入样式时,赋予他一个变量名,就可以将样式以 css module的形式引入。

import styles from './index.css';
 
export default function () {
  return <div className={styles.title}>
    Hello World
  </div>;
}

上面示例中,index.css文件中声明的样式不会对全局样式早成影响,他的作用域仅仅是该js文件。

dva

为什么需要状态管理

react的组件只是通过jsx以及样式按照state构建最终的UI,真正将页面动态化的实际上是state的变化实现的。对于简单的前端应用,在组件中通过组件自身的state加上父组件传过来的props就能够满足应用数据管理的需求,但是当应用膨胀到一定程度后就会导致组件内维护的状态非常复杂,加上组件之间的状态传递,很容易导致数据管理混乱。很小的改动都可以导致难以预料的副作用。

umi如何管理状态

umi内置了dva提供了一套状态管理方案

在这里插入图片描述

数据统一在 src/models 中的model管理,组件内尽可能的不去维护数据,而是通过connect去关联model中的数据。页面有操作的时候则触发一个action去请求后端接口以及修改model中的数据,将业务逻辑分离到一个环形的闭环中。使得数据在其中单向流动。让应用更好的进行维护。

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

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

相关文章

自定义委托类

setItemDelegete();该函数可以自定义委托类 该例子为Qt官网的一个例子&#xff1a;使用QSpinBox来提供编辑功能 首先创建一个项目&#xff1a;名为object在项目中添加一个c类&#xff0c;类名为SpinBoxDelegate 修改该类的基类&#xff1a;更改为QImageDelegate,然后需要添加重…

12/15历史上的今天

宜找代驾 星期四 农历十一月廿二 今夜无人拥你入怀不如喝完杯中酒走入夜色中踏上回家的归途 *约翰-梅尔西藏墨脱公路嘎隆拉隧道顺利贯通 2010年12月15日&#xff0c;西藏墨脱公路控制性工程——嘎隆拉隧道顺利贯通。   2010年12月15日西藏墨脱公路控制性工程——嘎隆拉隧道…

华为开源自研AI框架昇思MindSpore应用实践:RNN实现情感分类

目录一、环境准备1.进入ModelArts官网2.使用CodeLab体验Notebook实例二、数据准备1.数据下载模块2.加载IMDB数据集2.加载预训练词向量三、数据集预处理四、模型构建1.Embedding2.RNN(循环神经网络)3.Dense4.损失函数与优化器5.训练逻辑6.评估指标和逻辑五、模型训练与保存六、模…

电脑重装系统后卡顿怎么办?教你快速解决电脑卡顿问题

​Win10电脑卡顿怎么办&#xff1f;许多用户在使用电脑的过程中发现&#xff0c;随着使用时间的增加&#xff0c;电脑会越来越卡顿。有些小伙伴就会选择重装电脑系统&#xff0c;那么我们在重装电脑之后要进行什么操作才能让电脑不卡顿呢&#xff1f; 操作方法&#xff1a; 优化…

java学生成绩管理系统源码swing(GUI) MySQL带开发教程永久学习

今天给大家演示一款由Java swing即GUI和mysql数据库实现的&#xff0c;学生成绩管理系统&#xff0c;系统采用了MVC的设计模式&#xff0c;结构层次非常清晰&#xff0c;此外&#xff0c;该项目有手把手的开发教程&#xff0c;适合刚入门Java的学生学习&#xff0c;下面我们来看…

Pr:导出设置

◆ ◆ ◆导出设置&#xff08;媒体文件&#xff09;Export Settings&#xff08;Media File&#xff09;基本设置文件名File Name指定导出的文件名。位置Location可以点击蓝色字更改导出的文件的存放位置。预设Preset选择导出预设。匹配源 Match Source预设会将大多数设置与源…

[附源码]Python计算机毕业设计高校贫困生信息管理系统Django(程序+LW)

该项目含有源码、文档、程序、数据库、配套开发软件、软件安装教程 项目运行 环境配置&#xff1a; Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术&#xff1a; django python Vue 等等组成&#xff0c;B/S模式 pychram管理等…

Mysql 查询获取 为数字的 字符串

先看示例数据: test_value 字段 为 VARVCHAR 类型 数据样例&#xff1a; 包含 纯数字&#xff0c; 带小数点的数字&#xff0c; 字符串 获取里面的纯数字 &#xff1a;使用正则匹配 函数 REGEXP &#xff0c;返回 1代表不匹配&#xff0c; 返回 0 代表匹配 包含小数点 [^0-…

两步开启研发团队专属ChatOps|极狐GitLab ChatOps 的设计与实践

本文来自&#xff1a; 彭亮 极狐(GitLab) 高级产品经理 郭旭东 极狐(GitLab) 资深创新架构师 舒文斌 极狐(GitLab) 高级网站可靠性工程师 最近几天&#xff0c;ChatGPT 真是杀疯了 &#xff01; 相信大家的朋友圈&#xff0c;已经被调戏、询问或探讨 ChatGPT 的贴子刷屏。 看到…

虹科案例 | 风电机组的预测性维护应该如何进行?

虹科预测性维护方案 在风能领域的应用 虹科案例 01 应用背景 风能是最重要的清洁能源之一&#xff0c;大力发展风电等清洁能源是实现国家可持续发展战略的必然选择。发展风电、光伏等新能源的高效运维技术已成为当前电力系统面临的重要问题之一。在风电机组单机容量较大、机组…

在Azure上设置存储账户

目录 &#xff08;一&#xff09;前言 &#xff08;二&#xff09;正文 1. 搜索存储账户类型资源 2. 开始创建新存储账户 &#xff08;1&#xff09;基本信息 &#xff08;2&#xff09;高级选项 &#xff08;3&#xff09;网络配置 &#xff08;4&#xff09;数据保护…

怎么看电脑是32位还是64位?2个方法,快速查看

熟悉计算机操作系统的朋友应该知道&#xff0c;电脑系统分为32位和64位。不同系统位数的兼容软件也会有所不同。怎么看电脑是32位还是64位&#xff1f;这里小编分享2个方法&#xff0c;快速查看自己的电脑系统位数。 方法一&#xff1a;电脑属性查看法 很多小伙伴不知道怎么看…

特殊符号——双引号和单引号

特殊符号——双引号和单引号一.通常理解二.一般使用三.特殊使用四.为何计算机需要字符一.通常理解 在c语言中&#xff0c;我们通常认为双引号保存的是字符串&#xff0c;单引号里保存的是字符。这里也没什么好说的&#xff0c;说一说它们的细微的一些地方 二.一般使用 接下来我…

图为科技与深圳人工智能产业协会联合发布边缘计算机概念

2022年12月13日由图为信息科技&#xff08;深圳&#xff09;有限公司联合深圳市人工智能产业协会举办的“边缘计算机发布会”在深圳市龙岗区大运AI小镇举行。 随着5&#xff27;、物联网、人工智能等技术的规模应用和持续进步&#xff0c;边缘计算市场进入蓬勃发展期。我国在《…

罗克韦尔(AB)PLC远程维护连接不上网关怎么办?

对很多使用罗克韦尔&#xff08;AB&#xff09;PLC的工厂来说&#xff0c;PLC具备成熟系统和稳定性能等特点&#xff0c;可以适应厂内设备的控制指令&#xff0c;需要细心保养&#xff0c;认真维护。随着无线通信技术和物联网技术的发展&#xff0c;PLC的数据上云进行云端监控和…

过两年 JVM 可能就要被它替代了

今天说一说 GraalVM。 GraalVM 是 Oracle 大力发展和想要推广的新一代 JVM &#xff0c;目前很多框架都已经渐渐支持 GraalVM 了&#xff0c;比如我们在用的 Spring 也已经推出了对 GraalVM 兼容的工具包了。 既然说的这么厉害&#xff0c;那么它到底是何方神圣呢。 GraalVM…

java零基础入门-Scanner类

目录 1.概念 2.常用api 3.next()方法 4.nextLine()方法 5.next()与nextLine()区别 6.实例 1.概念 针对java5版本诞生&#xff0c;在jdk之前版本这次的版本是添加了java.util.Scanner类&#xff1b;其类是一个用于扫描输入文本的工具集。它不仅提供了可结合正则表达式和从输…

基于云原生的集群自愈系统 Flink Cluster Inspector

作者: 舟柒、楼台 1. 业务背景与挑战 1.1 实时计算集群现状 关于热点机器处理一直是阿里云 Flink 集群运维的一大痛点&#xff0c;不管在日常还是大促都已经是比较严重的问题&#xff0c;同时这也是分布式系统的老大难问题。而在今年整个阿里云成本控制的背景下&#xff0c;…

Flink 1.16:Hive SQL 如何平迁到 Flink SQL

摘要&#xff1a;本文整理自 Apache Flink PMC&Committer 伍翀&#xff08;云邪&#xff09;在 9 月 24 日 Apache Flink Meetup 的演讲。主要内容包括&#xff1a;Hive SQL 迁移的动机Hive SQL 迁移的挑战Hive SQL 迁移的实践Hive SQL 迁移的演示未来规划Tips&#xff1a;…

班级网页制作 HTML个人网页设计 我的班级网站设计与实现 大学生简单班级静态HTML网页设计作品 DIV布局班级网页模板代码 DW学生校园网站制作成品下载

&#x1f389;精彩专栏推荐&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb; ✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 &#x1f482; 作者主页: 【主页——&#x1f680;获取更多优质源码】 &#x1f393; web前端期末大作业…