手把手教你从零开始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 Lightbox 图片展示插件使用说明
Apr 25 Javascript
基于JQuery的一句代码实现表格的简单筛选
Jul 26 Javascript
js中的string.format函数代码
Aug 11 Javascript
关于JavaScript中string 的replace
Apr 12 Javascript
jquery的ajax异步请求接收返回json数据实例
Jun 16 Javascript
jQuery实现Twitter的自动文字补齐特效
Nov 28 Javascript
jQuery的promise与deferred对象在异步回调中的作用
May 03 Javascript
vue动态组件实现选项卡切换效果
Mar 08 Javascript
关于页面刷新vuex数据消失问题解决方案
Jul 03 Javascript
gulp教程_从入门到项目中快速上手使用方法
Sep 14 Javascript
Vue.JS项目中5个经典Vuex插件
Nov 28 Javascript
react-native-video实现视频全屏播放的方法
Mar 19 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
php preg_match_all结合str_replace替换内容中所有img
2008/10/11 PHP
探讨各种PHP字符串函数的总结分析
2013/06/05 PHP
PHP imagegrabscreen和imagegrabwindow(截取网站缩略图)的实例代码
2013/11/07 PHP
PHP反射机制用法实例
2014/08/28 PHP
php+mysql大量用户登录解决方案分析
2014/12/29 PHP
PHP使用flock实现文件加锁的方法
2015/07/01 PHP
php使用Jpgraph创建折线图效果示例
2017/02/15 PHP
Javascript学习笔记之函数篇(四):arguments 对象
2014/11/23 Javascript
JavaScript动态插入CSS的方法
2015/12/10 Javascript
javascript基本算法汇总
2016/03/09 Javascript
关于两个jQuery(js)特效冲突的bug的解决办法
2016/09/04 Javascript
关于js函数解释(包括内嵌,对象等)
2016/11/20 Javascript
Cookies 和 Session的详解及区别
2017/04/21 Javascript
Angular.js 4.x中表单Template-Driven Forms详解
2017/04/25 Javascript
vue实现底部菜单功能
2018/07/24 Javascript
element-ui表格数据转换的示例代码
2018/08/24 Javascript
浅谈vue项目4rs vue-router上线后history模式遇到的坑
2018/09/27 Javascript
JS实现随机抽选获奖者
2019/11/07 Javascript
封装Vue Element的table表格组件的示例详解
2020/08/19 Javascript
[05:20]卡尔工作室_DOTA2新手教学_DOTA2超强新手功能
2013/04/22 DOTA
[03:35]2018年度DOTA2最佳辅助位选手5号位-完美盛典
2018/12/17 DOTA
[43:47]完美世界DOTA2联赛PWL S3 LBZS vs Phoenix 第一场 12.09
2020/12/11 DOTA
Python复制目录结构脚本代码分享
2015/03/06 Python
Python入门_学会创建并调用函数的方法
2017/05/16 Python
Python Flask框架模板操作实例分析
2019/05/03 Python
Python 静态方法和类方法实例分析
2019/11/21 Python
Python3.7 读取音频根据文件名生成脚本的代码
2020/04/07 Python
违纪检讨书2000字
2014/02/08 职场文书
环保建议书500字
2014/05/14 职场文书
计算机毕业生求职信
2014/06/10 职场文书
教师群众路线心得体会
2014/11/04 职场文书
爱牙日宣传活动总结
2015/02/05 职场文书
水电工程师岗位职责
2015/02/13 职场文书
家长意见和建议怎么写
2015/06/04 职场文书
Python中的np.argmin()和np.argmax()函数用法
2021/06/02 Python
Python 图片添加美颜效果
2022/04/28 Python