umi


umi

Umi是蚂蚁金服推出的一套前端框架 主要是一个框架的扩展 umi是以路由为基础(在react的基础之上 强化了路由部分的内容)提出了配置式路由约定式路由 同时也有完整的路由功能 扩展功能

要求

ie8以下无效

react16.8以下无效

node10 以下无效

umi与cra的区别

cra 可以理解为是一个react的项目环境 不包含路由 redux等内容

 

umi可以理解为是基于react的一个二次框架 他里面聚集了更多有用的便捷的 功能比如路由功能

 

yarn

yarn facebook推出 同npm一样就是一个包管理工具

  npm yarn
初始化 npm init yarn init
安装依赖 npm install yarn install 或者 yarn
新增依赖 npm install --save xxxx yarn add xxx
全局安装 npm install -g xxxx yarn global add xxx
删除依赖 npm uninstall --save xxxx yarn remove xxx

安装 npm install -g yarn

切换yarn 镜像源 到淘宝 yarn config set registry https://registry.npm.taobao.org

 

 

umi安装

全局下载umi: yarn global add umi / npm install -g umi

查看版本: umi -v

cd 到指定文件夹下

安装项目 yarn create @umijs/umi-app / npm create @umijs/umi-app

安装依赖 npm install / yarn add

启动项目 npm start yarn start

 

新建页面

我们只需要在项目路径下使用

js的页面 umi g page 页面名即可创建

ts的页面 umi g page 页面名 --typescript --less

 

配置式路由

umi中已经默认帮助我们配置好路由了

1.来到.umirc文件中 通过配置routes进行路由设置

import { defineConfig } from 'umi';

export default defineConfig({
 nodeModulesTransform: {
   type: 'none',
},
 // 路由规则配置
 routes: [
  { path: '/', component: '@/pages/index' },
  { path: '/home', component: '@/pages/home' },
],
 fastRefresh: {},
});

title选项

配置路由的标题。

404页面

import { defineConfig } from 'umi';

export default defineConfig({
 nodeModulesTransform: {
   type: 'none',
},
 // 路由规则配置
 routes: [
  { path: '/', component: '@/pages/index',exact: true,title:"你好" },
  { path: '/home', component: '@/pages/home',title:"你坏" },
   // 404页面
  { path: '*', component: '@/pages/no',title:"404" },
],
 fastRefresh: {},
});

重定向

import { defineConfig } from 'umi';

export default defineConfig({
 nodeModulesTransform: {
   type: 'none',
},
 // 路由规则配置
 routes: [
   // 重定向
  { exact: true, path: '/', redirect: '/index' },
  { path: '/index', component: '@/pages/index',exact: true,title:"你好" },
  { path: '/home', component: '@/pages/home',title:"你坏" },
   // 404页面
  { path: '*', component: '@/pages/no',title:"404" },
],
 fastRefresh: {},
});

二级路由

配置规则

import { defineConfig } from 'umi';

export default defineConfig({
 nodeModulesTransform: {
   type: 'none',
},
 // 路由规则配置
 routes: [
   // 重定向
  { exact: true, path: '/', redirect: '/index' },
  { path: '/index', component: '@/pages/index',exact: true,title:"你好" },
  {
     path: '/home',
     component: '@/pages/home',
     title:"你坏",
     // 二级路由
     routes:[
      {path: '/home/era', component: '@/pages/er/era'},
      {path: '/home/erc', component: '@/pages/er/erc'}
    ]
  },
   // 404页面
  { path: '*', component: '@/pages/no',title:"404" },
],
 fastRefresh: {},
});

千万不要忘了设置路由出口

this.props.children 谁的二级路由写在谁的组件页面中

 

约定式路由

配置式路由是我们需要写一个配置路由的文件是umirc这个文件中配置routes这个数组对象 才能完成路由的设置

 

约定式 就是不需要配置routes就可以生成路由 你不写路由配置他就是约定式路由

如果没有routes的这个配置项 那么umi就会自动进入到约定式路由模式 他会自动分析pages文件夹 自动创建出路由

 

约定式路由虽然我们不需要写路由规则了 但是在一些复杂的环境下 我们需要按照umi的语法要求来创建文件与文件夹 才可实现复杂的路由功能

 

路由传参/动态路由匹配

向路由传参等这种复杂功能我们就需要设置对应的语法

在pages文件夹下创建文件夹 就是页面的名字 文件夹下的文件需要使用[接收参数]的这种命名方式

接收的时候在页面中接收

import {useEffect} from "react"
let Xiaoming=(props)=>{

  useEffect(()=>{
      // 打印以下接收的路由参数
      console.log(props.match.params.xiaoming);
  })
  return (
      <div>
          <h1></h1>
      </div>
  )
}
export default Xiaoming

发送

func=()=>{

history.push("/phone/我是小明")

}

 

路由导航

编程式

import React, { Component } from 'react'
// 1.引用
import { Link,history } from 'umi'
export default class topbar extends Component {

   fun=()=>{
       // 编程式导航
       history.push("/")
  }
   funb=()=>{
       history.push("/home")
  }
   render() {
       return (
           <div>
               <Link to="/">index</Link>
               <Link to="/home">home</Link>
               <hr />
               <button onClick={this.fun}>点我去index</button>
               <button onClick={this.funb}>点我去home</button>
           </div>
      )
  }
}

 

声明式

import React, { Component } from 'react'
// 1.引用
import { Link } from 'umi'
export default class topbar extends Component {
   render() {
       return (
           <div>
               <Link to="/">index</Link>
               <Link to="/home">home</Link>
           </div>
      )
  }
}

 

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM