react安装_超全面详细一条龙教程!从零搭建React项目全家桶(上篇)

2e193ad8a70a1c39dde759c1264a83f5.png
29253473f91001ffc28b1066b3523c85.png

React是近几年来前端项目开发非常火的一个框架,其背景是Facebook团队的技术支持,市场占有率也很高。很多初学者纠结一开始是学react还是vue。个人觉得,有时间的话,最好两个都掌握一下。从学习难度上来说,react要比vue稍难一些。万事开头难,但是掌握了react对于大幅提高前端技能还是非常有帮助的。本文一步步详细梳理了从创建react、精简项目、集成插件、初步优化等过程。对于react开发者来说,能够节省很多探索的时间。下面请跟着我来一步步操作。

先睹为快

正式开始前,先看下通过本次分享,能掌握什么?

  1. 从零创建React项目
  2. 支持Sass/Scss/Less/Stylus
  3. 路由使用:react-router-dom
  4. 组件的创建与引用
  5. React Developer Tools浏览器插件
  6. redux、react-redux使用
  7. redux-thunk
  8. store的创建与使用
  9. Redux DevTools安装与使用
  10. immutable.js使用
  11. Mock.js使用
  12. 解决本地跨域反向代理
  13. 其他常用工具汇总
  14. 超值附赠:集成Ant Design

即使你是新手,跟着操作一遍以后,也可以快速上手React项目啦!

※注:本文代码区域每行开头的“+”表示新增,“-”表示删除,“M”表示修改;代码中的“...”表示省略。

1 创建React-APP

为了加速npm下载速度,先把npm设置为淘宝镜像地址。

npm config set registry http://registry.npm.taobao.org/

也可以使用cnpm,根据喜好自行选择。

通过官方的create-react-app,找个喜欢的目录,执行:

npx create-react-app react-app

命令最后的react-app是项目的名称,可以自行更改。

稍等片刻即可完成安装。安装完成后,可以使用npm或者yarn启动项目。

进入项目目录,并启动项目:

cd react-appyarn start  (或者使用npm start)

如果没有安装yarn,可以前往yarn中文网站安装:

https://yarn.bootcss.com/

启动后,可以通过以下地址访问项目:

http://localhost:3000/

1fca1e2811058da4d230e940a1407a2c.png

2 精简项目

2.1 删除文件

接下来,删除一般项目中用不到的文件,最简化项目。

d86d3071ed82d7658f2c4c6270a33955.png

以上文件删除后,页面会报错。这是因为相应的文件引用已不存在。需要继续修改代码。

2.2 简化代码

现在目录结构如下,清爽许多:

d540e462c3b1eeaf99796ea28810829a.png

逐个修改以下文件:

src/App.js代码简化如下:

43aaece20d361300ba87e053dd0b7622.png

src/index.js代码简化如下:

7574f78ccc00e07e0129e79d10208b93.png

public/index.html

8249a00acdf7999b3b60b6d0d9e2b74b.png

运行效果如下:

5973f2b1d8e2863e5580d14b6e56d22d.png

2.3 使用Fragment去掉组件外层标签

react要求每个组件HTML的最外层必须是由一个标签包裹,且不能存在并列的标签。例如,在src/App.js中,如果是这样就会报错:

ee7081c8cf4b3cbd89da081d6cb92259.png

如果确实需要这样的HTML,并且不想再添加一个父级标签,可以使用Fragment作为最外层。代码修改如下:

6594a2bad9c67184adfbe7750a736976.png
97e99a26b36f7f79b018a1641205bc51.png

以上仅为了说明Fragment的使用效果。在某些组件嵌套的使用场景下,非常适合使用Fragment。例如父组件是

3 项目目录结构

项目目录结构可根据项目实际灵活制定。这里分享下我常用的结构,仅供参考。

d366bbf64153605e5081e12196aa1c7a.png

3.1 引入全局公用样式

在frame.css里引入其他公用样式: src/common/style/frame.css

6a618131bd0c226e106e62c8ddd1f70e.png

然后在src/index.js里引入frame.css

bbaf6b65b5e4381027eba79ac4c52ce0.png

如图,页面全局样式已生效。

2030f88024235ae734e3e1ce61b48919.png

3.2 支持Sass/Less/Stylus

工欲善其事必先利其器,这么高大上的react怎能好意思用最原始的css搭配呢?create-react-app默认情况下未暴露配置文件。要更灵活配置项目,需要将配置文件暴露出来。

执行以下命令,暴露配置文件:

※注意:暴露配置的文件的操作不可逆!

npm run eject

如果之前没有提及git的话,可能会报以下错误:

Remove untracked files, stash or commit any changes, and try again

需要先在项目根目录下执行:

git add . git commit -m "初始化项目(备注)"

稍等片刻,eject成功,目录变化如下:

bf31415c38108fb2d3889cd598637534.png

3.2.1 支持Sass/Scss

eject后,虽然package.json以及webpack.config.js里有了sass相关代码,但是要正确使用Sass/Scss,还要再安装node-sass。

执行以下命令:

npm install node-sass --save-dev

安装完成后,项目已支持Sass/Scss,可以将原css文件后缀名修改为sacc/scss,别忘了把src/index.js中引入的frame.css后缀名修改为sacc/scss。

3.2.2 支持Less

支持Less稍微多一点步骤,首先安装less和less-loader:

npm install less less-loader --save-dev

然后修改config/webpack.config.js:

74ef9fa5dd61a263b395bc42d8f4cac2.png

修改后需要执行yarn start重启项目。

然后将原css文件的后缀名修改为less,src/index.js中引入的frame.less,页面已正常解析less。

3.2.3 支持Stylus

支持Stylus跟Less完全一样,首先安装stylus和stylus-loader:

执行以下命令:

npm install stylus stylus-loader --save-dev

安装完成后,按照上一小节介绍的支持less的方法,修改config/webpack.config.js。完成后重启项目,引入stylus文件可以正常解析了。

我个人习惯使用Stylus,因此后续的讲解中使用Stylus。同时,把src/common/下的style目录也更名为stylus。

3fefd0e24f4b4445e59df94c309da321.png

frame.styl代码如下:

b68df07c68f3c6d55d3b6cde62b0e8bb.png

src/index.js代码修改如下:

bab21750206f678b776c9de535c95813.png

最基本的配置搞定了,接下来要开始引入页面(pages)了。页面的切换需要使用路由(Router),请继续阅读下面的章节。

4 路由

4.1 页面构建

首先,构建home和login页面。

src/pages/home/index.js代码:

d0bed90c33d25b13a0581f5835506b53.png

src/pages/home/home.styl代码

95203da764cf4a98c76c8e9251c256c3.png

src/pages/login/index.js代码:

bf93c867f27d870574fa5b4a12b7d80f.png

src/pages/login/login.styl代码

1012d35fa0a02f9c1e76ddcef24e676a.png

我个人的习惯是,仅供参考:

  • 全局公用级别(不需要模块化)的className,用G-xxx。例如G-autocut(截字)、G-color-red(文字红色)。
  • 页面级别的className,用P-xxx。
  • 模块级别的className,用M-xxx。

接下来,我们使用react-router-dom实现路由。

4.2 使用react-router-dom

执行安装命令:

npm install react-router-dom --save

修改src/App.js,代码如下:

b5d8c90a7b87447bb3a86a71d760fd5a.png

App.js引入了Home和Login两个页面级组件。然后使用react-router-dom分别设置了路径。

import的机制是默认寻找index.js,所以每个组件的主文件名设为index.js,在引用的时候就可以省略文件名。

这里说明一下的属性:

  • path表示路径,这个很好理解。
  • component表示绑定的组件。
  • exact表示是否精确匹配。

如果没有设置exact,那么:

localhost:3000/会显示Home页,

localhost:3000/abc也会显示Home页。

因为匹配到了前面的"/",路由就会成功。

最后的表示以上都没有匹配成功的会,默认跳转的路由。

来看下效果:

访问http://localhost:3000/#/login效果:

a16cedfa35ffc794534939665ba8618b.png

访问http://localhost:3000/#/home效果:

fe655f7a9fc24a321feece351a97eeec.png

4.3 路由跳转

接下来,简单介绍下如果在页面之间进行路由跳转。

在Login页面添加一个用于跳转至Home页的按钮,代码修改如下:

49c2eacdebfa35edc48a0e03f76a93a6.png

注意button的onClick里要bind(this),否则,在gotoHome里的this是undefined。

当然,也可以这么写:

12fdde8609aa47ccaf5c3fb1cb4c2a1e.png

最终目的都是要让gotoHome中的this指向正确的作用域。

ea45d84179f81a8bdc61feaee626c1bc.png

5 组件引入

这章节内容也很容易,接触过vue的同学应该也很清楚,为了教程的完整性,还是简单说一下。下面来简单实现一个公用的头部组件。

5.1 创建header组件

目录结构如下:

db05ec2466191aa45da0aaf2d4b42238.png

src/components/header/index.js代码:

0009567053ac0f3af7727a377ebc0f66.png

src/components/header/header.styl代码:

570ac461921f593fa70022ab1cfa06b6.png

5.2 引入Header组件

然后,在Home和Login页面里引入Header组件。

以Home页面为例,修改src/pages/home/index.js:

1d54b4dc9cbfd163af8ef4c20d6fef6d.png

同样的方式在Login页面也引入Header组件,代码就不放出了。效果如下:

1981cecfe6706b9079a3dc94bf749ce5.png

5.3 组件传参

使用过vue的同学都知道,vue组件有data和props。对应react的是state和props。

react向子组件传参使用以下方式:

c76c53c4f09c1fecd71546f69ddb415c.png

在Header组件内部,直接使用this.props就可以接收。例如:this.props.param1。

本次分享主要是介绍流程性的内容,篇幅有限,关于react的state和props请查阅官方文档。

6 React Developer Tools浏览器插件

为了更方便调试react项目,建议安装chrome插件。

先科学上网,在chrome网上应用店里搜索“React Developer Tools”并安装。

120ba512aaabb81ff2be9bbf509fee53.png

安装完成后,打开chrome调试工具,可以清晰的看到react项目代码结构。

bf00467c7b90c4f1c282ebb2afb4c52c.png

项目GitHub

本次分享涉及的项目代码已全部上传至GitHub,有需要的同学可前往自行下载:

https://github.com/Yuezi32/react-family

敬请阅读下篇

本次分享(上篇)暂告一段落。在下篇中,将继续讲解以下内容:

7 Redux及相关插件

  • 7.1 安装redux
  • 7.2 安装react-redux
  • 7.3 安装redux-thunk
  • 7.4 安装浏览器Redux插件
  • 7.5 创建store
  • 7.6 复杂项目store分解
  • 7.7 对接react-redux与store
  • 7.8 启动Redux DevTools
  • 7.9 安装使用immutable

8 Mock.js安装与使用

9 解决本地开发跨域问题

10 其他常用工具

11 附赠章节:集成Ant Design

  • 11.1 安装Ant Design
  • 11.2 实现按需加载
  • 11.3 自定义主题颜色

敬请阅读《超全面详细一条龙教程!从零搭建React项目全家桶(下篇)》

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

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

相关文章

MATLAB中find函数详解

(转自http://blog.sina.com.cn/emily250886) 功能: 寻找非零元素的索引和值语法:1. ind find(X) 2. ind find(X, k) 3. ind find(X, k, first) 4. ind find(X, k, last) 5. [row,col] find(X, ...) 6. [row,col,v] f…

Oracle Service Bus简介

我们正在为电信提供商设计一个新系统,在该系统中,我们研究了用作企业服务总线的Oracle服务总线(OSB)。 对我来说,第一个优点是它提供了惊人的工具支持。 通过将其捆绑为Oracle SOA套件,Oracle已将其所有企业…

VS2008中源文件与模块生成时的文件不同,仍要让调试器使用它吗

解决办法: 1.在工具-> 选项-> 调试-> 常规 里 把“要求源文件和版本匹配”的勾勾去掉 然后去掉“地址级的调试”的勾勾(这样就不会出现反汇编代码了) 然后重新引用 2.直接把WEB项目下面的Bin文件夹下的BLL全部删除。 3.若出现如下的警告信息 仔…

Linux中的15个‘echo’ 命令实例

作者: tecmint Avishek Kumar 译者: LCTT geekpi | 2014-10-03 12:42 评论: 4 收藏: 5 分享: 5 echo是一种最常用的与广泛使用的内置于Linux的bash和C shell的命令,通常用在脚本语言和批处理文件中来在标准输出或者文件中显示一行文本或…

springboot redis 断线重连_Redis高可用方案实现

redis中为了实现高可用(High Availability,简称HA),采用了如下两个方式:主从复制数据。采用哨兵监控数据节点的运行情况,一旦主节点出现问题由从节点顶上继续进行服务。主从复制redis中主从节点复制数据有全…

罗德里格斯(Rodrigues)旋转向量与矩阵的变换

在做双目立体视觉深度图像生成的时候,遇到旋转向量(1x3)与旋转矩阵(3x3)的概念,得知二者可以通过罗德里格斯相互转化。 1.旋转的表示 处理三维旋转问题时,通常采用旋转矩阵的方式来描述旋转变换…

Mongodb 分片与副本集

测试搭建192.168.3.110mongos 30000,30001,30002config 40000,40001,40002shard1 50001,50002,50003shard2 50004,50005,50006,shard3 50007,50008,50009[rootmysql-slave10 data]# mkdir -p /data/config/1/data[rootmysql-slave10 data]# mkdir -p /data/config/2…

python必读5本书籍_免费下载!5本从Python入手机器学习的必备电子书!(附链接)...

大数据文摘授权转载自数据派THU作者:Richard Gall编译:车前子、丁楠雅今天,机器学习已成为软件工程所有领域中最重要的发展趋势之一。这门技术不再局限于研究者和数据分析者,从网络安全到网络开发机,器学习都至关重要。…

error c4996: 'fopen' This function or variable may be unsafe如何解决

1.问题描述 VS2013OPENCV249,不止一次遇到以下类似错误: error C4996: fopen: This function or variable may be unsafe. Consider using fopen_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.d:\open…

JavaParser中AST节点的观察者

我们离JavaParser 3.0的第一个候选发布版本越来越近。 我们添加的最后一项功能是支持观察抽象语法树的所有节点的更改。 当我为此功能编写代码时,我收到了Danny van Bruggen(又名Matozoid)和Cruz Maximilien的宝贵反馈。 因此,我使…

nc命令详解

NetCat,在网络工具中有“瑞士军刀”美誉,其有Windows和Linux的版本。因为它短小精悍(1.84版本也不过25k,旧版本或缩减版甚至更小)、功能实用,被设计为一个简单、可靠的网络工具,可通过TCP或UDP协…

startindex 不能大于字符串长度_「12」学习MySQL第二类函数:字符串函数

前一篇文章总结了下MySQL中常用的数学函数,本文接下来的重点就是认识“字符串函数”。上图这匹漂亮的马儿就是通过各种字符(字母、括号、逗号、竖线等)画出来的。我不由自主地会去想下面几个问题:它到底有多少个字符?--字符串长度它里面的小写…

对数函数的C、MATLAB表示

1、C语言中的对数函数 头文件:#include格式:①double log (double x);log() 函数返回以 e 为底的对数值,即数学中的lnx;如果 x 为负数或 0,则会发生错误并设置 errno 值。错误代码:EDOM:参数x 为…

微信小程序开发——超链接或按钮点击跳转到其他页面失效

1. 超链接导航失效: 小程序规则——wx.navigateTo 和 wx.redirectTo 不允许跳转到 tabbar 页面,只能用 wx.switchTab 跳转到 tabbar 页面转载于:https://www.cnblogs.com/xyyt/p/9252835.html

javaone_JavaOne 2012:Lambda之路

javaone我最热切期待的JavaOne 2012演讲之一是Brian Goetz的“通往Lambda的道路”。 昨晚的技术主题演讲中的Lambda味道仅增加了预期。 这是在希尔顿广场A / B举行的,距离我之前在金门大桥A / B / C参加的演讲仅几步之遥。 我曾预计会打包相对较大的Plaza A / B&…

uml 时序图_UML各种图总结:

UML的书籍:《UML distilled》、《UML和模式应用》、《UML用户指南》、《UML对象设计与编程》、《UMLOracle8建模》UML(Unified Modeling Language)是一种统一建模语言,为面向对象开发系统的产品进行说明、可视化、和编制文档的一种…

让程序结果在屏幕上暂停一段时间

现在使用VS2013输出printf显示结果&#xff0c;经常会出现一闪而过的情况&#xff0c;现有以下解决办法&#xff1a; 1.调用系统命令暂停 #include <stdlib.h>system("pause");2. #include<conio.h> getchar(); 3. #include<stdlib.h> getchar(); …

Linux shell的标准输入、输出和错误

1.文件描述符 在linux shell执行命令时&#xff0c;每个进程都和三个打开的文件相联系&#xff0c;并使用文件描述符来引用这些文件。由于文件描述符不容易记忆&#xff0c;shell同时也给出了相应的文件名&#xff1a; 文件文件描述符输入文件—标准输入0&#xff08;缺省是键…

微基准测试进入Java 9

我已经几个月没有在这里写文章了&#xff0c;这种例外也会继续下去。 我计划在明年三月左右恢复写作。 本文末尾的说明。 等待&#xff01; 不完全是最后&#xff0c;因为您可以向下滚动。 它在文章结尾处。 继续阅读&#xff01; 三年前&#xff0c;我在写有关Java编译器如何…

摆渡车(noip2018 pj t3)

摆渡车&#xff08;题目和测试右转 洛谷P5017&#xff09; 做法&#xff1a;dp各种优化(剪枝) 这道题考场上看了一脸懵逼...第一眼看这 tm 不是个一维dp吗...结果按着这个朦胧的思路&#xff0c;删删改改约莫0.5h&#xff0c;终于过了小样例&#xff0c;然后一测大样例...GG了。…