Umi3 创建,配置环境,路由传参(代码示例)

目录

创建项目

配置环境

创建脚手架

项目结构及其目录、

路由

配置路由

嵌套路由

编程式导航和声明式导航

声明式导航

编程式导航

约定式路由

路由传参

query传参(问号)

接收参数

params传参(动态传参)

接收参数


创建项目

配置环境

首先得有 node,并确保 node 版本是 10.13 或以上。(18版本可能会不适配)

$ node -v  //查看版本
v16.20.2

如果出现版本错误,可以使用nvm进行node版本管理https://blog.csdn.net/kkkys_kkk/article/details/135071784?spm=1001.2014.3001.5501

推荐使用 yarn 管理 npm 依赖,并使用国内源(阿里用户使用内网源)。

# 国内源
$ npm i yarn tyarn -g
# 后面文档里的 yarn 换成 tyarn
$ tyarn -v# 阿里内网源
$ tnpm i yarn @ali/yarn -g
# 后面文档里的 yarn 换成 ayarn
$ ayarn -v

创建脚手架

 创建项目文件夹

$ mkdir myapp && cd myapp

通过官方工具创建项目,

$ yarn create @umijs/umi-app
# 或 npx @umijs/create-umi-appCopy:  .editorconfig
Write: .gitignore
Copy:  .prettierignore
Copy:  .prettierrc
Write: .umirc.ts
Copy:  mock/.gitkeep
Write: package.json
Copy:  README.md
Copy:  src/pages/index.less
Copy:  src/pages/index.tsx
Copy:  tsconfig.json
Copy:  typings.d.ts

安装依赖

$ yarn
或者
$ npm i

启动项目

$ yarn start
或者
$ npm start

在浏览器里打开 http://localhost:8000/,能看到以下界面

项目结构及其目录、


├── package.json   项目基本信息 、依赖信息
├── tsconfig.json  ts的配置文件
├── typings.d.ts   ts的类型声明文件(凡是以xxx.d.ts结尾的文件都是咱们的ts类型声明文件)
├── .umirc.ts      核心配置文件
├── .env           环境参数文件
├── mock           mock数据
├── src├── .umi       编译后自动生成的文件,不需要动├── pages               业务组件文件夹(页面)├── index.less└── index.tsx       业务组件

路由

umi的路由分为配置路由与约定路由

配置路由

在`pages`中新建一个页面

export default function Home() {return (<div>Home</div>)
}

在.umirc.ts中的routes配置项中新增路由配置

import { defineConfig } from 'umi';
export default defineConfig({nodeModulesTransform: {type: 'none',},routes: [{path: '/home',component: '@/pages/Home'},{path: '/course',component: '@/pages/Course'}],fastRefresh: {},
});

umi官方推荐我们使用config方法

在项目文件下创建config文件夹,复制umirc.ts内容,同时删除umirc.ts文件,因为umirc.ts的权重高

创建config文件,粘贴umirc.ts,将routes作为文件导入引入

import { defineConfig } from 'umi';
import routes from './router/index';export default defineConfig({nodeModulesTransform: {type: 'none',},fastRefresh: {},routes
});

创建路由文件,声明路由,导出

const routes=[{path: '/home',component: '@/pages/Home'},{path: '/course',component: '@/pages/Course'}],
export default routes
嵌套路由

嵌套路由是通过`routes`属性来实现的

 const routes=[{path:'/index',component:'@/pages/Base/Base',routes:[{path:'one',component:'@/pages/One/One'},{path:'two',component:'@/pages/Two/Two'},{path:'three',component:'@/pages/Three/Three'},]},
]

然后在组件中通过props.children来渲染子路由

import React from 'react';
import styles from './index.less';export default (props:any) => {return (<div className={ styles['container'] }>{ props.children }</div>)
}
编程式导航和声明式导航
声明式导航
import React from 'react';
import styles from './index.less';
import { NavLink } from 'umi';// 通过接口定义props类型
interface Props {children: React.ReactNode
}
// 在umijs中,Props类型的定义一般会用到React.FC类型,FunctionComponent类型
// 在React.FC类型中,Props类型是一个泛型,用来定义组件所接收的Props类型
const Course:React.FC<Props> = (props) => {return (<div className={ styles['container'] }>{/* v5版本的路由是一样的 */}<NavLink to="/course" activeClassName="active">去课程</NavLink>Course <br />{ props.children }</div>)
}export default Course;
编程式导航

编程式导航是通过: history.push 方法来实现的

import styles  from './index.less';
import { NavLink, history } from 'umi';export default function Home() {return (<div className={ styles['container'] }>Pages Home{/* 声明式导航 */}<NavLink to="/course" activeClassName="active">去课程</NavLink>{/* 编程式导航 */}<button onClick={ () => history.push('/course') }>去课程</button></div>)
}

约定式路由

如果没有routes 配置 , Umi 会进入约定式路由模式, 然后分析src/pages 目录拿到路由配置。 比如以下文件结构:

└── pages├── index.tsx└── users.tsx

会得到以下路由配置

[{ exact: true, path: '/', component: '@/pages/index' },{ exact: true, path: '/users', component: '@/pages/users' }
]

路由传参

query传参(问号)

写入路径中

history.push('/list?id=1');

以对象形式

history.push({pathname: '/list',query: {name: 'b',},
});
接收参数

使用history方法

import {history } from 'umi'

生成变量接收参数

 const id =history.location.search.split('=')[1]

 或者使用useLocation函数,返回表示当前 URL 的对象。您可以将其视为每当 URL 更改时返回新位置。

import { useLocation } from 'umi';export default () => {const location = useLocation();return (<div><ul><li>location: {location.pathname}</li></ul></div>);
};
params传参(动态传参)

路由表配置改为动态

  {path:'/anthor/:id',component:'@/pages/detail/Id'},

同样使用history方法

  <button onClick={()=>{history.push('/anthor/1')}}>click me</button>

将需要传递的参数直接写入路径当中

接收参数

useParams返回 URL 参数的键/值对的对象。使用它来访问当前路由

import { useParams } from 'umi';export default () => {const params = useParams();return (<div><ul><li>params: {JSON.stringify(params)}</li></ul></div>);
};

返回的是包含数据信息的对象

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

领域特定语言(Domain-Specific Language, DSL)在 Visual Studio 2022中的实验——建立领域模型

一、环境 dotnet --version 8.0.101 Microsoft Visual Studio Enterprise 2022 (64 位) - Current 版本 17.8.4 已安装组件 ComponentLinkVisual Studiohttp://go.microsoft.com/fwlink/?LinkId185579Visual Studio SDKhttps://go.microsoft.com/fwlink/?li…

Blender——将模型及其所有纹理与材质导入unity

前期准备 参考视频&#xff1a;7分钟教会你如何将Blender的模型材质导入unity_哔哩哔哩_bilibili 实验模型官网下载地址&#xff1a;Hoi An Ancient House Model free VR / AR / low-poly 3D model CSDN下载链接&#xff1a; 【免费】Blender三维模型-古代房屋模型&#xff…

css实现动态水波纹效果

效果如下&#xff1a; 外层容器 (shop_wrap)&#xff1a; 设置外边距 (padding) 提供一些间距和边距 圆形容器 (TheCircle)&#xff1a; 使用相对定位 (position: relative)&#xff0c;宽度和高度均为 180px&#xff0c;形成一个圆形按钮圆角半径 (border-radius) 设置为 50%&…

Eureka 本机集群实现

距离上次发布博客已经一年多了&#xff0c;主要就是因为考研&#xff0c;没时间学习技术的内容&#xff0c;现在有时间继续完成关于代码方面的心得&#xff0c;希望跟大家分享。 今天在做一个 Eureka 的集群实现&#xff0c;我是在本电脑上跑的&#xff0c;感觉这个挺有意思&a…

网工每日一练(1月15日)

1.某计算机系统由下图所示的部件构成&#xff0c;假定每个部件的千小时可靠度为R&#xff0c;则该系统的千小时的可靠度为 ( D ) 。 2.以下IP地址中&#xff0c;属于网络 201.110.12.224/28 的主机IP是&#xff08; B &#xff09;。 A.201.110.12.224 B.201.110.12.238 C.20…

机器学习在什么场景下最常用-九五小庞

机器学习在多个场景中都有广泛的应用&#xff0c;下面是一些常见的应用场景&#xff1a; 自然语言处理&#xff08;NLP&#xff09;&#xff1a;如语音识别、自动翻译、情感分析、垃圾邮件过滤等。数据挖掘和分析&#xff1a;如市场分析、用户画像、推荐系统、欺诈检测等。智能…

代码随想录算法训练营29期|day 22 任务以及具体安排

235. 二叉搜索树的最近公共祖先 class Solution {public TreeNode lowestCommonAncestor(TreeNode root, TreeNode p, TreeNode q) {if(root null) return null;//向左遍历if(root.val > p.val && root.val > q.val){TreeNode left lowestCommonAncestor(roo…

一文极速了解【自注意力机制】

当下如火如荼的大模型&#xff0c;其中的关键技术就是注意力机制&#xff08;Attention&#xff09;&#xff0c;于2015年提出。2017年的“Attention is all you need”一文提出了Transformer模型&#xff0c;去掉RNN&#xff0c;只保留注意力&#xff0c;性能吊打所有机器翻译…

基于springboot+vue的蜗牛兼职网的设计与实现系统(前后端分离)

博主主页&#xff1a;猫头鹰源码 博主简介&#xff1a;Java领域优质创作者、CSDN博客专家、公司架构师、全网粉丝5万、专注Java技术领域和毕业设计项目实战 主要内容&#xff1a;毕业设计(Javaweb项目|小程序等)、简历模板、学习资料、面试题库、技术咨询 文末联系获取 项目背景…

我的创作纪念日-1024总结

我的创作纪念日-1024总结 1 机缘1.1 创作的初心是解决重复性问题1.2 实战项目中的经验分享1.3 日常学习中的记录1.4 其他方式的分享 2 收获3 日常4 成就5 憧憬 1 机缘 1.1 创作的初心是解决重复性问题 成为创作者的初心是因人而异的&#xff0c;但对我而言&#xff0c;它源于…

lua使用resty.http做nginx反向代理(https请求,docker容器化部署集群),一个域名多项目转发

下载使用 链接&#xff1a;https://pan.baidu.com/s/1uQ7yCzQsPWsF6xavFTpbZg 提取码&#xff1a;htay –来自百度网盘超级会员V5的分享 在根目录下执行: # 从 github 上下载文件 git clone https://github.com/ledgetech/lua-resty-http.git # 将 lua-resty-http/lib/ 下的 r…

实验一 安装和使用Oracle数据库

&#x1f57a;作者&#xff1a; 主页 我的专栏C语言从0到1探秘C数据结构从0到1探秘Linux菜鸟刷题集 &#x1f618;欢迎关注&#xff1a;&#x1f44d;点赞&#x1f64c;收藏✍️留言 &#x1f3c7;码字不易&#xff0c;你的&#x1f44d;点赞&#x1f64c;收藏❤️关注对我真的…