手把手教你从零开始react+antd搭建项目


Posted in Javascript onJune 03, 2021

之前的文章都是自己的学习日志,主要是防止自己遗忘之前遇到的坑。这次将从最基础的项目搭建开始讲起,做一个基于react和antd的后台管理系统。我会一步步进行下去,所以看完本文你哪怕不了解react,应该也会使用react做一个简单的项目。话不多少,直接开始。完整项目请前往GitHub查看,体验请点击这里。如果觉得可以请给一颗star,谢谢各位。

1、开发环境:

node.js -v 12.16.3

create-react-app -v 3.4.1

antd -v 4.3.3

项目开始前请自行全局安装create-react-app,macos请在指令前加上sudo不然会有报错说没有权限访问硬盘。

npm install -g create-react-app

2、项目构建:

初始化项目直接使用脚手架工具create-react-app的指令,本文接下来使用的是tsx。如需jsx版本,请跳过模板设置。这里简单介绍一下jsx,jsx是javascript的语法糖。他是react打造的,react为了做到多平台自己在js的基础上封装了一些合成事件。例如react中的onClick事件其实和原生js的click事件是不太一样的。

jsx版本的指令为:

npx create-react-app project-name

tsx版本如下:

手把手教你从零开始react+antd搭建项目

等待安装完成后,项目的初始化工作已经完成了。

现在进入项目目录:cd react-admin(这里替换为你的项目名称),执行指令进入开发模式吧。

npm start

手把手教你从零开始react+antd搭建项目

接下来我们进入正题,由于react默认没有router功能,所以需要安装react-router、react-router-dom。

如果需要状态管理的同学可以安装redux、react-redux、redux-actions。

需要按需加载的同学可以安装@loadable/component,注意ts版本可能会报错,创建一个loadable.d.ts的文件里面写上以下代码即可解决。

declare module '@loadable/component'

需要使用loadash的同学自行安装loadash。

接下来安装antd组建库。

npm i antd react-router react-router-dom redux react-redux redux-actions @types/redux-actions @types/react-router-dom @loadable/component axios loadash --save

create-react-app默认是使用sass的,如需使用less等其他css预处理器,请自行安装。

另外这里简单说个题外话。create-react-app默认使用的是react-scripts,是不能修改webpack配置的。如果需要修改webpack配置,有两种解决方案:

1、使用社区的第三方库比如react-app-rewired等。

2、执行指令:npm run eject这样会在当前目录生成scripts和config文件夹。你可以修改webpack的配置。注意:该操作为永久性的,不可逆。

话归正题,安装完这些基础库以后。初始化你的项目目录,这里可以根据自己的喜好设置目录结构,我的目录结构如下:

手把手教你从零开始react+antd搭建项目

接下来打开router目录写router.tsx的代码。这里只展示主要代码:

手把手教你从零开始react+antd搭建项目

接下来就可以使用数组来完成route的配置了,例如:

import loadable from '@loadable/component';
import { RouteComponentProps } from 'react-router';

const Index = loadable(() => import('../pages/index'));
const Login = loadable(() => import('../pages/login'));

export interface RouteConfigProps {
  path: string,
  exact: boolean,
  component: React.ComponentType<RouteComponentProps<any>> | React.ComponentType<any>,
  id: number,
  name?: string,
  routes?: Array<RouteConfigProps>
}
export const routeConfig: Array<RouteConfigProps> = [
  {
    path: '/login',
    exact: true,
    component: Login,
    id: 1,
    name: '登陆',
    routes: []
  },
  {
    path: '/index',
    exact: false,
    component: Index,
    id: 2,
    name: '首页',
    routes: []
  }
]

接下来就去app.tsx里面引入路由配置吧,顺便把antd的一些配置也整理一下。

import React from 'react';
import { Provider } from 'react-redux'; // redux提供的provider。
import zhCN from 'antd/es/locale-provider/zh_CN'; // antd的中文包
import { HashRouter } from 'react-router-dom'; 
import { MyRouter } from './router'; // 刚才的router.tsx
import { ConfigProvider, message, notification } from 'antd'; 
import storeConfig from './store'; // redux的仓库
import moment  from 'moment'; // momentjs。
import 'moment/locale/zh-cn'; // 中文包moment.js
import 'antd/dist/antd.css'; // 引入antd的样式表
import './App.css'
moment.locale('zh-cn'); // 将moment.js设置为中文

const store = storeConfig(); // 初始化redux的store,如不需要状态管理器,redux相关可以忽略。

message.config({ // antd的message组件配置,during持续时间单位为秒,maxcount最多显示个数
  duration: 2,
  maxCount: 2
});
notification.config({
  placement: 'topRight', // antd的通知组件配置,placement弹出位置。bottom距离底部的距离,during持续时间单位为秒
  bottom: 50,
  duration: 2,
});
function App() {
  return (
    <Provider store={store}>
      <ConfigProvider locale={zhCN}>
        <HashRouter>
          <MyRouter />
        </HashRouter>
      </ConfigProvider>
    </Provider>
  );
}

export default App;

这样就大功告成了,接下来就是编写自己需要的组件了。

到此这篇关于手把手教你从零开始react+antd搭建项目的文章就介绍到这了,更多相关react+antd搭建项目内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Javascript 相关文章推荐
jquery 可拖拽的窗体控件实现代码
Mar 21 Javascript
JavaScript位移运算符(无符号) &gt;&gt;&gt; 三个大于号 的使用方法详解
Mar 31 Javascript
分离与继承的思想实现图片上传后的预览功能:ImageUploadView
Apr 07 Javascript
javascript超过容器后显示省略号效果的方法(兼容一行或者多行)
Jul 14 Javascript
jquery插件bootstrapValidator数据验证详解
Nov 09 Javascript
js编写选项卡效果
May 23 Javascript
Vue.js实现输入框绑定的实例代码
Aug 24 Javascript
微信小程序 上传头像的实例详解
Oct 27 Javascript
详解mpvue开发微信小程序基础知识
Sep 23 Javascript
vue使用一些外部插件及样式的配置代码
Nov 18 Javascript
vant-ui组件调用Dialog弹窗异步关闭操作
Nov 04 Javascript
详解微信小程序(Taro)手动埋点和自动埋点的实现
Mar 02 Javascript
react antd实现动态增减表单
react 项目中引入图片的几种方式
Jun 02 #Javascript
小程序wx.getUserProfile接口的具体使用
js实现自动锁屏功能
Jun 02 #Javascript
如何将JavaScript将数组转为树形结构
Jun 02 #Javascript
关于antd tree 和父子组件之间的传值问题(react 总结)
使用react+redux实现计数器功能及遇到问题
You might like
MySQL数据库转移,access,sql server 转 MySQL 的图文教程
2007/09/02 PHP
thinkPHP模板算术运算相关函数用法分析
2016/07/12 PHP
php安装ssh2扩展的方法【Linux平台】
2016/07/20 PHP
javascript 24小时弹出一次的代码(利用cookies)
2009/09/03 Javascript
基于IE下ul li 互相嵌套时的bug,排查,解决过程以及心得介绍
2013/05/07 Javascript
基于jquery扩展漂亮的下拉框可以二次修改
2013/11/19 Javascript
js点击出现悬浮窗效果不使用JQuery插件
2014/01/20 Javascript
jQuery层动画定位滑动效果的方法
2015/04/30 Javascript
不能不知道的10个angularjs英文学习网站
2016/03/23 Javascript
JS正则替换去空格的方法
2017/03/24 Javascript
实例分析JS与Node.js中的事件循环
2017/12/12 Javascript
Angular实现的table表格排序功能完整示例
2017/12/22 Javascript
jQuery实现表单动态添加与删除数据操作示例
2018/07/03 jQuery
微信小程序日历效果
2018/12/29 Javascript
小程序云开发之用户注册登录
2019/05/18 Javascript
nodejs简单抓包工具使用详解
2019/08/23 NodeJs
解决Layui 表格自适应高度的问题
2019/11/15 Javascript
js点击事件的执行过程实例分析【冒泡与捕获】
2020/04/11 Javascript
[03:55]DOTA2完美大师赛选手传记——LFY.MONET
2017/11/18 DOTA
[01:11:46]DOTA2-DPC中国联赛 正赛 iG vs Magma BO3 第一场 2月23日
2021/03/11 DOTA
Python爬取读者并制作成PDF
2015/03/10 Python
python实现zabbix发送短信脚本
2018/09/17 Python
pycharm 使用tab跳出正在编辑的括号(){}{}等问题
2021/02/26 Python
GLAMGLOW格莱魅美国官网:美国知名的面膜品牌
2016/12/31 全球购物
小蚁科技官方商店:YI Technology
2019/08/23 全球购物
C++面试题目
2013/06/25 面试题
什么是数据库锁?Oracle中都有哪些类型的锁?
2015/08/21 面试题
.NET面试问题集
2015/12/08 面试题
党员学习党的群众路线思想汇报(5篇)
2014/09/10 职场文书
个人查摆问题及整改措施
2014/10/16 职场文书
2015年公民道德宣传日活动总结
2015/03/23 职场文书
2016年圣诞节寄语(一句话)
2015/12/07 职场文书
汽车销售合同文本
2019/08/08 职场文书
各类场合主持词开场白范文集锦
2019/08/16 职场文书
Python中常见的导入方式总结
2021/05/06 Python
微信小程序实现轮播图指示器
2022/06/25 Javascript