1.软文推荐

2.软文推荐

3.软文推荐

目录: 1、使用mobx和mobx-react代替redux和react-redux 2、从0搭建React+antd+TypeScript+Umi Hooks+Mobx前端框架 使用mobx和mobx-react代替redux和react-redux

1、安装,这里又两个包需要安装, mobx 和 mobx-react

npm i mobx mobx-react --s-d

注意如果要兼容IE必须使用5.x.x或者之前的版本

2、创建mobx主文件(例子创建的目录是mobx/index.js)

引入mobx

3、在任意组件里加入mobx-react并使用

至此,简单的mobx教程就完成了从0搭建React+antd+TypeScript+Umi Hooks+Mobx前端框架

因为现在公司的主要技术栈是React,所以也想着能够搭建一个好的React前端框架,方便在工作中使用;框架在打包过程也做了优化,多线程,拆包,缓存等等手段提升打包速度和质量。主要用到的库包括:

创建带TypeScript模板的react-app,推荐使用yarn,接下来我也主要以yarn做例子

然后在项目根目录创建一个 craco.config.js 用于修改默认配置。antd按需加载以及自定义主题

重新打包就可以了, 所有的主题配置在这里噢

这里利用React-router做路由,同时也会根据用户角色,做权限处理;只有当角色和路由允许的角色一致时才可以访问和展示。

新建router下新建indext.tsx 用于渲染页面

引入Router/index.tsx

新建hasPermission.ts,如果页面 roles 包括用户的角色则返回true,在渲染menu和子页面的时候就根据这个值渲染页面。

比如Home页面,渲染子页面的逻辑:

在这里 SubPages1 下面的 page1 就无法展示出来和访问,如果直接输入路由也会访问页面不存在,因为page1允许的角色 user 而我们角色是 admin 所以无法展示。

useImmer 很好的解决了ReactHooks中的赋值的性能问题,可以单独更新某个对象的某个属性。

上面的赋值方法也可以写到一起,效果是一样的:

Umi Hooks 是一个 React Hooks 库,致力提供常用且高质量的 Hooks。提供了非常多的Hooks组件,比如上面使用的 usePersistFn ,他的作用:在某些场景中,你可能会需要用 useCallback 记住一个回调,但由于内部函数必须经常重新创建,记忆效果不是很好,导致子组件重复 render。对于超级复杂的子组件,重新渲染会对性能造成影响。通过 usePersistFn ,可以保证函数地址永远不会变化。Umi Hooks功能还是非常强大的,有很多功能很强大的API。大家可以去官方文档看看 。

自定义 hooks 其实在我们的开发工作中,还是很常遇到的。 hooks 的好处就是可以抽离公共方法,像组件一样的随意使用,对于快节奏的开发工作还是很舒服的,比如你觉得 react hooks 或者 umi hooks 的api,不能满足自己的需求,也可以自己创新一些api。我这里举个例子,大家写 class 组件写的很多的话,会经常用的 this.setState() ,大家都知道 this.setState() 是异步执行,你无法直接拿到最新的 state 。 hooks 中的 useState 同样也是异步的,你无法直接获取到最新的 state ,所以我自己写了一个 useSetState 方法,用于在修改完状态后能够立即拿到最新的 state 。

我们在src/hooks文件夹下新建 useSetState.ts

使用的方式也很简单,基本和useState一致,只是在setState的时候提供一个回调函数。

这就完成了带回调的 useSetState hooks 的编写,不过这种写法不太推荐在 hooks 中使用,建议需要获取最新的数值都在 useEffect 或者 useUpdateEffect(umi hooks) 中去。

状态管理选择的Mobx,Mobx和Redux我都用过,不过当我习惯用Mobx后,就感觉还是Mobx更方便一些,所以更喜欢在项目中用Mobx,现在Mobx已经更新到5.0版本了,不过5.0版本并不支持ie11,所以如果想要兼容性可以选择4.0的版本,或者Redux。

这里推荐一个针对Mobx的库, mobx-react-lite :它是基于 React 16.8 和 Hooks 的 MobX 的轻量级React绑定。

这个主要影响的是调用方法的形式,对于Mobx的书写是一样的,比如写一个加减数值:

这里你的typeScirpt可能会编译不了,会报错:Experimental support for decorators is a feature that is subject to change in a future release. Set the 'experimentalDecorators' option in your 'tsconfig' or 'jsconfig' to remove this warning.

解决方法是在 tsconfig.json 加入配置:

完毕以后,一定要把 storeProvider 包裹所需要共享状态的页面,我这里直接放到app.tsx

剩下来就仅仅是调用的事情了:

此外axios的配置应该大家都知道,所以我这也不多说了,具体在我的源码里面也有,utils下的axios.ts

加入了打包分析 webpack-bundle-analyzer speed-measure-webpack-plugin

加入了打包进度条 webpackbar

加入了打包压缩 compression-webpack-plugin terser-webpack-plugin

还对包进行拆包

开发环境的域名代理 devServer

加快打包速度,还可以考虑删除antd-icons,单独去iconfont网站下,按需引入。不然打包会费很多时间

引入dotenv-cli

新增开发环境配置文件 .env.development 和 .env.production 两个文件

然后修改package.json中的启动脚本:

现在 yarn start 或者 yarn build 就会根据环境配置来处理。

还有一些细节的调整,会尽力将这个框架更加完善的。

github地址:

欢迎star 和提意见

相关文章 8

1

vps韩国日本香港,vps韩国日本香港港 2分钟前

目录:1、谁来科普一下,香港,俄罗斯,新加坡,日本,韩国的vps2、国外vps服务器哪个3、哪款海外 VPS 性价比高4、可以国外的vps5、日本...

2

seo外部优化很简单易速达,seo站外优化最主要的是什么 3分钟前

目录:1、seo如何优化 SEO优化方法有哪些2、外部SEO优化该怎么做3、seo怎么优化 seo优化的方法4、seo优化怎么做seo如何优化 SEO优化方法有哪些...

3

韩国kt线路vps,韩国kt官网 4分钟前

目录:1、韩国kt云主机vps云服务器 可以架设游戏么2、哪个机房的韩国服务器更稳定?3、韩国kt路由器怎么设置无线网络4、哪里有最稳定韩国...

4

nginx缓存服务器,nginx缓存功能的作用 5分钟前

目录:1、nginx 缓存机制2、【NGINX入门】3.Nginx的缓存服务器proxy_cache配置3、nginx缓存(proxy_cache模块)4、Nginx作为缓存服务5、深入Nginx + PHP 缓存...

5

网站排名优化尢金手指花,金手指花卉图片大全 7分钟前

目录:1、网站关键词优化排名方案有哪些?2、如何将网站的关键词排名优化3、网站排名怎么优化网站关键词优化排名方案有哪些? 网站关...

6

香港高防低价vps,香港vps10元 10分钟前

目录:...

7

宜昌网站制作,宜城网站制作公司 12分钟前

目录:1、宜昌网站建设哪家最好!2、宜昌找人做网页,现在网页正常运行,可是对网页的版面不满意,想找个人重新改下版。价位是多少?...

8

韩国私人vps拍拍,韩国私人vps拍拍网站 14分钟前

目录:1、韩国vps多少钱一年2、哪里的韩国vps比较好,要速度快的稳定的,最好重装系统是免费的3、vps韩国uplus线路好吗4、最近找到一家很...