从零搭建react hooks项目(github有源代码)
前言
首先这是一个react17的项目,包含项目中常用的路由、状态管理、less及全局变量配置、UI等等一系列的功能,开箱即用,是为了以后启动项目方便,特地做的基础框架,在这里分享出来。
这里写一下背景,我最开始是node8的环境,因为react17需要至少node14的版本,我就直接升级到16了,关于node升级遇到的问题,我有另一篇文章专门罗列步骤和可能出现的问题及解决方案,这里就不多说。链接在这 https://www.cnblogs.com/pengfei-nie/p/15701138.html
下边是目录,因为每个项目不一样,比如less、antd就不是必须的,大家可以直接点目录跳转自己想看的内容
另外,先贴一下代码,这是我的GitHub项目地址 点这里,看源码
以下流程是从零搭建,如果某些模块你已经有了可以直接跳过。
目录
先卸载老版本脚手架,然后安装最新版本的,然后创建我们的应用,指令在下边了。npx是npm附带安装的,可以执行二进制文件。创建好项目,我们就可以打开项目,看一下效果了。
npm uninstall -g create-react-app
npm install -g create-react-app
npx create-react-app react-cli17
然后安装less,我习惯使用less,如果不需要的可以直接略过。不过这个项目我会配置全局的样式,还会配置全局的less变量。这个可以说是必须的,一个系统得有统一的风格,特别是色调和文字大小,有全局变量,后期维护或者做扩展都很方便,这也是良好的习惯。
下边是安装less相关包的指令
npm install less less-loader --save
npm i style-resources-loader
现在运行eject指令,暴露出项目的配置文件,然后安装proxy本地服务代理依赖,官方支持代理,但是功能不多,用这个做多服务转发,socket转发等方便很多。关于代理,在src目录下创建setupProxy.js文件,不需要引入,系统会自动拦截转发的。具体代码这里不贴了,看源码吧。
完善下目录结构,提前把常用的文件目录都建好,后面就不用一一添加了,看下图。
修改端口号,scripts\start.js 文件下第47行,将原来的端口号改成你想要的。改端口号方法很多,但是我们既然选择eject了,那就在start.js文件里面修改。
配置less,config\webpack.config.js 文件 74行 和 541行,就是在sass的后边增加less的解析、全局样式文件的引入,确保你可以在项目任何地方使用你的less变量。这个行数是参考我的原码来的,至于具体每一行代码什么意思,我就不在这具体说了,只说配置,先把架构搭建起来,涉及东西太多,不明白的自己慢慢学。
配置便捷路径,config\webpack.config.js 322行,就是配置一个便捷路径,不需要按照相对路径一层层写下去,直接利用根路径和path模块,前端常规操作。
npm run eject // 显示配置文件
npm install http-proxy-middleware --save // 安装代理中间件
四、安装路由react-route-dom
先安装路由。这里大致解析下App.jsx文件,看图片。react升级后,相关的依赖也都做了升级,增加了对应的hooks支持。标签更是变化非常大,Routes就是以前Switch,还有其他标签也变了,比如重定向、根标签等等,这里也不多说,查文档即可。需要注意下按需加载,首次用到某个模块时,才会加载,使用suspense会自动执行加载动画,要不然会闪屏。当然后续再打开就不会有加载动画了。
结构方面,我做了layout布局组件,这个也是根据项目需要做修改,比如登陆、注册肯定不会和业务逻辑页面用同样的布局,所以我认为登陆、首页等属于静态路由不会变的,然后其他都属于业务逻辑页面,进行了路由嵌套。其实这里只是举了简单的例子,有一个路由的区分。不想把404还有其他一些情况写进来,毕竟每个项目场景不同。
src\layouts\BasicLayout.jsx 布局文件渲染,这里渲染业务逻辑路由,我写了个递归,路由和菜单都在route文件维护就好。
npm install --save react-router-dom
安装状态管理和http请求。src\utils\request.js 这是封装的axios文件,对token添加,报错统一处理等做了处理,代码有注释。 src\store\index.js 文件是redux的配置注意分模块,action注意都加上模块名,做区分,避免action同名,同时触发。代码有注释。
npm install axios 做http请求的
npm install redux 状态管理的
npm install react-redux 更方便的全局使用redux
npm i redux-thunk redux中间件,解决异步请求问题的
六、安装antd
然后安装UI库,我用antd习惯了,这里还是用它,这里大家随意,毕竟UI库很多,用别的的直接跳过。antd的引入本来就是按需加载的,最新版本icon为了迎合按需加载,也单独抽离出来了。最新版放弃了moment ,改用dayjs。鉴于此,那我们项目中也使用dayjs,也得安装一下。不过这个包用法和moment一样,体积小特别多,确实更好。
这里注意修改 package.json 的babel配置,见下图,按需加载样式文件的。这个antd官网详细有说明
npm i antd --save
npm i --save @ant-design/icons
npm install babel-plugin-import --save--dev
npm i dayjs
封装可复用组件,类型检查是必须的,因为我没有使用typeScript语法,所以使用props-types。然后这个项目我做了一些简单逻辑,比如登陆,比如权限校验,这些都是项目中必需的,为了方便,安装了mock,做了模拟数据,mock也是非常方便的工具,装了不吃亏。
npm i prop-types 做类型检查
npm install mock 安装mock,做数据模拟
八、编写页面逻辑
src\components 写了一些全局组件,src\views\Report.jsx 是一个使用组件做的增删改查界面。代码逻辑我就不多说了。我在另一篇博客做了一些组件封装,还有useState useEffect等hooks函数的使用讲解,感兴趣的可以去那看 链接在这: https://www.cnblogs.com/pengfei-nie/p/15719569.html
九、总结
这篇文章主要是对我GitHub上react17项目框架的一个搭建说明。记录一下这个框架是怎么一步步搭建起来的。当中涉及的知识点很多,毕竟是一个项目的骨架,所以主要讲怎么做,至于每个模块代码怎么用,那写起来篇幅就太大了。不过这也是一条很好的学习之路,顺着这套搭建流程,将这些技术点一个个攻克还是很有必要的。
希望这篇文章能对你有所帮助!
从零搭建react hooks项目(github有源代码)的更多相关文章
- 从零搭建一个SpringCloud项目之Feign搭建
从零搭建一个SpringCloud项目之Feign搭建 工程简述 目的:实现trade服务通过feign调用user服务的功能.因为trade服务会用到user里的一些类和接口,所以抽出了其他服务需要 ...
- 从零搭建vue3.0项目架构(附带代码、步骤详解)
前言: GitHub上我开源了vue-cli.vue-cli3两个库,文章末尾会附上GitHub仓库地址.这次把2.0的重新写了一遍,优化了一下.然后按照2.0的功能和代码,按照vue3.0的语法,完 ...
- 从零搭建一个IdentityServer——项目搭建
本篇文章是基于ASP.NET CORE 5.0以及IdentityServer4的IdentityServer搭建,为什么要从零搭建呢?IdentityServer4本身就有很多模板可以直接生成一个可 ...
- 从零搭建react+ts组件库(封装antd)
为什么会有这样一篇文章?因为网上的教程/示例只说了怎么做,没有系统详细的介绍引入这些依赖.为什么要这样配置,甚至有些文章还是错的!迫于技术洁癖,我希望更多的开发小伙伴能够真正的理解一个项目搭建各个方面 ...
- 用yeoman搭建react画廊项目笔记
1.安装yeoman npm install yo -g yo --version //检测 yeoman版本,成功显示版本号,则安装成功 2.到yeoman官网 http://yeoman.io ...
- 通过create-react-app从零搭建react环境
一. 快速开始: 全局安装脚手架: $ npm install -g create-react-app 通过脚手架搭建项目: $ create-react-app <项目名称> 开始项目: ...
- 使用webpack2.0 搭建react.js项目
最近一段时间没有写react.js,发现webpack已经完全升级为2.0了,升级后导致以前的项目不能正常编译,只能重新实践一番 关于webpack2.0和1.x的区别概括起来就是tree shaki ...
- 从零搭建一个SpringCloud项目之Config(五)
配置中心 一.配置中心服务端 新建项目study-config-server 引入依赖 <dependency> <groupId>org.springframework.cl ...
- 从零搭建react开发环境
早在六年前,前端开发已经实现了模块化.工程化开发,既然是模块化工程化开发那就少不了包管理工具,所以我们的第一步就是先从安装nodejs开始(安装nodejs携带JavaScript的包管理工具npm) ...
随机推荐
- accent, access, accident
accent A colon (:) is used to represent a long vowel [元音], e.g. sheet /ʃiːt/ and shit /ʃit/. The wor ...
- celery开启worker报错django.core.exceptions.ImproperlyConfigured: Requested setting INSTALLED_APPS, but settings are not configured. You must either define the environment variable DJANGO_SETTINGS_MODULE o
其实挺简单的问题,但花了自己一个下午来解决,先是浏览各种博客,无果:没办法,然后去看celery官方文档,无果,近乎绝望,最后仔细看代码,找到问题所在(如下),自学狗这效率...... 下面是自己ta ...
- MySQL(5):安装MySQL
下载地址 下载地址:https://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-5.7.19-winx64.zip 安装步骤 第一步:下载得到压缩包,并解压 ...
- linux系统下安装dubbo-admin
1.在安装dubbo-admin之前确保你得linux服务器上已经成功安装了jdk,tomcat, 若还没安装jdk以及tomcat则参考我的上一篇文章"linux环境下安装jdk,tomc ...
- springMVC WebApplicationInitializer 替代web.xml 配置Servlet 之原理
Servlet 3.0之前 ,xml 配置 在过去搭建spring + springMCV ,首先第一步要做的是什么 ,就是要配置web.xml 文件 ,把springMVC 中的Servlet 加 ...
- Mysql的基操
创建一个数据库 (myschool是数据库名) create database myschool; 删除数据库 drop database myschool 创建一个表:(Student是 表名) ...
- CSS伪类选择器实现三角形
使用css实现常用的三角效果 项目中三角: .breadcrumb{ height: 40px; line-height: 40px; padding: 0 20px; border-top: 1px ...
- Redis操作命令合集
目录 一.客户端命令 二.sql命令 一.客户端命令 #读取配置文件启动 redis-server redis.conf #关闭 Redis,Redis服务器将断开与客户端链接,产生持久化文件,平滑关 ...
- 在对话框中设置前置任务(Project)
<Project2016 企业项目管理实践>张会斌 董方好 编著 在[任务信息]中的[前置任务]选项卡中设置,这是最古板的法子. 至于[任务信息]这个对话框从哪里去找,这--这么久了,不会 ...
- 使用.NET 6开发TodoList应用(3)——引入第三方日志库
需求 在我们项目开发的过程中,使用.NET 6自带的日志系统有时是不能满足实际需求的,比如有的时候我们需要将日志输出到第三方平台上,最典型的应用就是在各种云平台上,为了集中管理日志和查询日志,通常会选 ...