01.React概述及环境搭建

1.React简介

  • React背景:Facebook需解决的问题:构建数据不断变化的大型应用。


  • React特点:简单,声明式
    核心:组件,设计目的提高代码复用率(将数据和逻辑封装),降低测试难度(组件高内聚低耦合,容易测试)

  • React虚拟DOM


    虚拟DOM结构

    虚拟dom的结构能够将html的node节点的比较的算法复杂度从O(n^3)降低到O(n),操作dom的速度更快。


    为什么快

    diff算法
  • 官网:
    https://github.com/facebook/react/
    https://reactjs.org/

2.环境搭建

2.1 方式一:使用CDN Links搭建开发环境

这里可以看不同的版本号:https://cdnjs.com/libraries/react/16.0.0
开发环境,在html中引入如下script:16表示版本号,可以替换

<script crossorigin src="https://unpkg.com/react@16/umd/react.development.js"></script>
<script crossorigin src="https://unpkg.com/react-dom@16/umd/react-dom.development.js"></script>
<script src="https://unpkg.com/babel-standalone@6.15.0/babel.min.js"></script>

部署环境,在html中引入

<script crossorigin src="https://unpkg.com/react@16/umd/react.production.min.js"></script>
<script crossorigin src="https://unpkg.com/react-dom@16/umd/react-dom.production.min.js"></script>
<script src="https://unpkg.com/babel-standalone@6.15.0/babel.min.js"></script>
  • demo1:Hello world
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Hello React</title>
    <script crossorigin src="https://unpkg.com/react@16/umd/react.production.min.js"></script>
    <script crossorigin src="https://unpkg.com/react-dom@16/umd/react-dom.production.min.js"></script>
    <script src="https://unpkg.com/babel-standalone@6.15.0/babel.min.js"></script>
</head>
<body>
<script type="text/babel">
    //两个参数,一个是标签,一个是放置的位置。这里是在body中放入h1标签
    ReactDOM.render(<h1>Hello, world!</h1>,document.body);
</script>
</body>
</html>
2.2 方式二使用npm搭建
2.2.1 创建一个新的React应用

官网:https://reactjs.org/docs/add-react-to-a-new-app.html

  • 1) 安装node.js和npm
    进入nodejs官网下载node https://nodejs.org/en/
    下载对应版本

    我下载了node8.9.3版本,包括npm 5.5.1版本

    下载完成后安装该文件


    安装完成

【1】打开命令行,cmd或者Windows PowerShell
【2】查看node版本

node -v

【3】更改npm默认安装路径
默认是在c:\Users\Administrator\AppData里面安装,装在c盘很乱不舒服。先修改位置。

在nodejs里面创建了两个文件夹,node_globe,node_cache作为npm默认路径。


【4】更改npm安装默认的源

npm config set registry https://registry.npm.taobao.org 
npm info underscore (如果上面配置正确这个命令会有字符串response)

【5】配置系统环境变量


系统变量里面找到Path

点击编辑,添加默认安装路径,我的是F:\nodejs\node_global
  • 2)安装react脚本架
npm install -g create-react-app
安装成功
  • 3)cd到项目目录,创建自己的react app,这里我创建的应用名为react-learn
create-react-app my-app
项目目录

创建app

创建成功
  • 4)进入创建的项目目录,执行如下命令
cd react-learn
npm start
执行成功

网页输入网址,显示如下,成功
  • 5)用intellij打开



    配置run configurations

    之后可以直接点击run按钮,就可以启动项目


2.2.2 为已有的项目添加react开发环境

官网:https://reactjs.org/docs/add-react-to-an-existing-app.html
创建好的react-existing项目源码:

  • 1)参考2.2.1安装node.js和npm
  • 2)安装需要的包
    【1】进入到项目目录下,执行如下命令
npm init
我的项目目录,目前是空的


执行完成后项目中会生成package.json文件



【2】在项目目录下安装react所用的包

--save会将安装的包相关信息写入package.json中

npm install --save react react-dom
安装过程

安装完成项目目录

package.json

【3】在项目目录下安装babel相关的包支持ES6转译成ES5

npm install --save babelify babel-preset-react babel-preset-es2015
安装命令

可以看到安装完成后有一个警告,说需要babel-core包

所以在项目目录安装babel-core


安装完成

package.json文件

【4】webpack热加载配置

  • 需要webpack的原因
    用编辑器打开项目,创建index.html文件,和index.js文件



    index.js

    index.html
运行错误,不能识别index.js第四行,react的语法
  • 1)webpack安装
    首先在全局环境中安装
npm install -g webpack
npm install -g webpack-dev-server
全局安装webpack

全局安装webpack-dev-server

之后在项目目录中安装,进入到项目目录中

npm install webpack --save
npm install  webpack-dev-server --save
安装webpack
安装webpack-dev-server

package.json文件内容发生变化
  • 2)在项目中创建webpack.config.js文件


    项目目录

    webpack.config.js内容:

var debug = process.env.NODE_ENV !== "production";
var webpack = require('webpack');
var path = require('path');

module.exports = {
  context: path.join(__dirname),
  devtool: debug ? "inline-sourcemap" : null,
  entry: "./src/js/index.js",
  module: {
    loaders: [
      {
        test: /\.js?$/,
        exclude: /(node_modules)/,
        loader: 'babel-loader',
        query: {
          presets: ['react', 'es2015']
        }
      }
    ]
  },
  output: {
    path: __dirname,
    filename: "./src/bundle.js"
  },
  plugins: debug ? [] : [
    new webpack.optimize.DedupePlugin(),
    new webpack.optimize.OccurenceOrderPlugin(),
    new webpack.optimize.UglifyJsPlugin({ mangle: false, sourcemap: false }),
  ],
};

  • 3)进入项目目录执行webpack命令


    webpack命令

    可以看到报错说没有babel-loader包
    进入项目目录执行如下命令

npm install babel-loader --save

再执行webpack

index.html的src改为bundle.js

重新运行可以看到helloworld
  • 4)为了能够实时监测js的改变,并且实时打包。
webpack --watch

之后更改js文件就会实时webpack。

  • 【5】保存之后页面自动刷新的功能(项目重新运行只需要进入项目目录执行该命令即可)
    在项目目录下,执行如下命令
webpack-dev-server 

3.Chrome,火狐浏览器react调试插件安装

https://github.com/facebook/react-devtools

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,684评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,143评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,214评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,788评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,796评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,665评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,027评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,679评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 41,346评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,664评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,766评论 1 331
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,412评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,015评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,974评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,203评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,073评论 2 350
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,501评论 2 343

推荐阅读更多精彩内容