手把手教你全家桶之React(一)

前言

最近项目用到react,其实前年我就开始接触react,时光匆匆,一直没有时间整理下来(太懒啦)!如今再次用到,称工作间隙,对全家桶做一次总结,项目源码地址。废话不多说,上码。

创建一个文件目录并初始化package.json

    mkdir react-Buckets
    npm init  

填好相关信息如图

安装webpack

  • 需要有全局安装哦,不然一会用webpack编译时会报错的
  • 关于装依赖加入package.json时,加 --save-dev表示开发环境要用的依赖,如果加 -save表示生产环境依然要用的依赖。
    npm install --save-dev webpack
  • 手动添加webpack配置文件
    touch webpack.dev.config.js
  • 配置文件
    var path=require(‘path‘);
    module.exports={
        // 入口文件指向src/index.js
        entry:path.join(__dirname,‘src/index.js‘),
        //打包后的文件到当前目录下的dist文件夹,名为bundle.js
        output:{
            path:path.join(__dirname,‘./dist‘),
            filename:‘bundle.js‘
        }
    };
  • 生成主要文件目录
    mkdir src && cd src
    touch index.js
  • 入口文件写点内容
    document.getElementById(‘app‘).innerHTML=‘This is my React!‘;
  • 进行一个小测试
    webpack --config webpack.dev.config.js

效果如图

  • 此时发现目录下生成了 dist/bundle.js
  • 我们在dist目录下新建 index.html
    touch ./dist/index.html
  • 编辑index.html
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
</head>
<body>
    <div id="app"></div>
    <script type="text/javascript" src="./bundle.js"></script>
</body>
</html>
  • 在浏览器打开index.html

  • 编译优化:我们每次编译都要输那么长串的命令太难记,我们在package.json中设置命令,简化它:
    "scripts": {
        "test": "echo \"Error: no test specified\" && exit 1",
        "build":"webpack --config webpack.dev.config.js"
    },
  • 运行的时候使用,此处要注意下webpack的版本,如果是4.0则会提示装webpack-cli模块
    npm run build

安装与配置babel

平时大家在项目中不管用的vue还是react,应该大多都开始用ES6或ES7的语法了吧。想必都了解如果想让浏览器可以直接识别,基本都会选用babel插件进行编译转换。下面为大家一一介绍:

  • babel-core 调用Babel的API进行转码使用
  • babel-loader 允许使用babel和webpack将文件转化成JavaScript
  • babel-preset-es2015 将ES6解析成ES5
  • babel-preset-react 解析JSX语法
  • babel-preset-stage-0 解析ES7提案

    那么先统一安装下

    npm install --save-dev babel-core babel-loader babel-preset-es2015 babel-preset-react babel-preset-stage-0

安装好后,添加配置文件

    touch .babelrc

打开文件,对babel进行配置,注:此处stage-0是包含stage-1,stage-2,stage-3

    {
        "presets":[
            "es2015",
            "react",
            "stage-0"
        ],
        "plugins":[]
    }
  • 在webpack配置中加入babel,修改webpack.dev.config.js

    在配置babel-loader模块时,将cacheDirectory=true是为了缓存编译结果,优化下次编译的。

    modle:{
        rules:[{
            test:/\.js$/,
            use:[‘babel-loader?cacheDirectory=true‘],
            include:path.join(__dirname,‘src‘)
        }]
    }
  • 配置好了后,对babel进行测试,修改src/index.js
//使用ES6的箭头函数
var babeltest=()=>
    console.log(‘This is Babel Test!‘);
babeltest();

安装与配置react

  • 安装
    npm install --save react react-dom
  • 页面中引入src/index.js
    import React from ‘react‘;
    import ReactDom from ‘react-dom‘;
    ReactDom.reader(
        <div>First React!</div>,
        document.getElementById(‘app‘)
    )

  • 自定义一个组件,建好目录,我们把组件放入src/component中
    cd src
    mkdir component && cd component
    mkdir Hello && cd Hello
    touch Hello.js
  • 进入Hello.js
import React, {Component} from ‘react‘;
export default class Hello extends Component{
    reder(){
        return(
            <div>Hello React!</div>
        )
    }
}
  • 引用Hello.js,进入src/index.js
    import React from ‘react‘;
    import ReactDom from ‘react-dom‘;
    import Hello from ‘./component/Hello/Hello‘;
    ReactDom.reader(
        <Hello/>,
        document.getElementById(‘app‘);
    )

路由配置react-router

  • 安装与目录新建
    npm install --save react-router-dom
    cd src
    mkdir router && touch router/router.js
  • 打开router.js,配置home和about页面
    import React from ‘react‘;
    import {BrowserRoter as Router,Route,Swith,Link} from ‘react-router-dom‘;
    import Home from ‘../pages/Home/Home‘;
    import Page1 from ‘../pages/About/About‘;

    const getRouter=()=>(
        <Router>
            <div>
                <ul>
                    <li><Link to="/">首页</Link></li>
                    <li><Link to="/about">About</Link></li>
                </ul>
                <Switch>
                    <Route exact path="/" componen={Home} />
                    <Route path="/about" component={About}/>
                </Switch>
            </div>
        </Router>
    );
    export default getRouter;
  • 新建好组件文件目录
cd src
mkdir pages && cd pages
mkdir Home && touch Home/Home.js
mkdet About && touch About/About.js
  • 打开Home.js,定义内容
    import React,{Component} from ‘react‘;
    export default class Home extends Component{
        render(){
            return(
                <div>
                    <h1>欢迎来到我的网站</h1>
                    <p>这是一个首页</p>
                </div>
            )
        }
}
  • 打开About.js,定义内容
    import React,{Component} from ‘react‘;
    export default class About extends Component{
        render(){
            return(
                <div>
                    <h2>关于我们</h2>
                    <p>自定义react全家桶</p>
                </div>
            )
        }
    }
  • 在入口文件src/index.js,引入Router
    import React from ‘react‘;
    import ReactDom from ‘react-dom‘;
    import getRouter from ‘./router/router‘;
    ReactDom.render(
        getRouter(),
        document.getElementById(‘app‘)
    )
  • 编译下,效果如图
    npm run build

我们发现页面是出来了,但是点击切换不了路由,原因是因为我们需要配置一个web服务器来指向index.html,在这里我们来配置一个webpack-dev-server。

web服务器配置 webpack-dev-server

webpack-dev-server是我们做前后端分离时,常会用到的依赖,它是一个小型的静态文件服务器,可以为webpack打包后生成的文件提供web服务器功能。

  • 安装,这个和webpack一样,要有全局安装才行。
    npm install [email protected] --save-dev
  • 修改配置文件webpack.dev.config.js
    devServer:{
        //将服务器根目录指向打包后的dist文件,默认是指向项目的根目录
        contentBase:path.join(__dirname,‘./dist‘);
    }
  • 测试
    webpack-dev-server --config webpack.dev.config.js

打开http://localhost:8080

8080是默认端口,可更改配置。同样,我们把编译命令优化下:

    "scripts": {
        "test": "echo \"Error: no test specified\" && exit 1",
        "build": "webpack --config webpack.dev.config.js",
        "start": "webpack-dev-server --config webpack.dev.config.js --color --progress"
    },
  • 小贴示:可以试试打开浏览器后,去删除dist/bundle.js哦,是不是页面依然可以打开呢,因为webpack-dev-server编译后会缓存在内存中!
附webpack-dev-server 基本配置
  1. color : 打印日志为彩色
  2. progress : 日志显示进度
  3. historyApiFallback : 值为Boolean,设为true时,作意404的请求路径,会指向index.html
  4. host : 默认为loaclhost,可以设为IP地址,局域网内用其它设备IP访问
  5. port : 端口号,默认为8080
  6. proxy : 代理,比如后端交互的服务器地址为localhost:9000,设置如下
    proxy:{
        "/api":"htpp://localhost:9000"
    }

未完待续 ^_^

原文地址:https://www.cnblogs.com/zhoulin-circle/p/8963275.html

时间: 2024-10-10 07:34:52

手把手教你全家桶之React(一)的相关文章

vue全家桶和react全家桶

vue全家桶:vue  +  vuex (状态管理)  + vue-router (路由) + vue-resource +axios +elementui react全家桶 : react + redux(状态管理) +react-router(路由) + axios + antd || antd-model 原文地址:https://www.cnblogs.com/aibabel/p/11827851.html

手把手教你如何使用webpack+react

上一篇随笔讲述了新手入门入门前端 里面提到的第四阶段跟上当前前端的发展需要入门一个框架和自动化工具,当时推荐的是webpack+react 今天正好有空,也把自己入门webpack + react 的艰辛过程写下来, 现在想起来真是一脸泪.过程不表了, 现在将我看到的一些教程总结一下,挑选出对新手比较友好的学习过程.   第一步: webpack 和 react  是要配合node.js 一起使用的. 去node.js官网下载当前node, 官网会根据你的环境匹配你适合的版本,直接下载安装就好了

手把手教你webpack、react和node.js环境配置(上篇)

很多人刚学习react的时候,往往因为繁琐的配置而头疼,这里我将手把手教大家怎么用webpack配置react和redux的环境,这篇教程包括前端react和后台node整个网站的环境配置,对node没兴趣的可以只看这篇. 这里是下篇链接:手把手教你webpack.react和node.js环境配置(下篇) 我把所有代码都放到了github上面供参考:webpack-react-express环境配置 1. 什么是webpack? Webpack 是当下最热门的前端资源模块化管理和打包工具.它可

react全家桶-1

全家桶内装有: react - github react-router - github redux - github react-redux - github react-router-redux - github redux-saga - github immutable - github reselect - github antd - github 服务端: json server 作为工具,支持CORS和JSONP跨域请求,支持GET, POST, PUT, PATCH 和 DELET

东方耀 手把手教React Native实战开发视频教程+源码笔记全集

课程序号标题 第0课0.手把手教React Native实战之开山篇_视频 第1课1.手把手教React Native实战之环境搭建_视频_Windows环境 第1课1.手把手教React Native实战之环境搭建[Mac真机]同时调试开发Android&IOS 第2课2.手把手教React Native实战之从React到RN 第3课3.手把手教React Native实战之flexbox布局(RN基础) 第4讲4.手把手教React Native实战之flexbox布局(伸缩属性) 第5讲

react全家桶从0搭建一个完整的react项目(react-router4、redux、redux-saga)

react全家桶从0到1(最新) 本文从零开始,逐步讲解如何用react全家桶搭建一个完整的react项目.文中针对react.webpack.babel.react-route.redux.redux-saga的核心配置会加以讲解,通过这个项目,可以系统的了解react技术栈的主要知识,避免搭建一次后面就忘记的情况. 从webpack开始 思考一下webpack到底做了什么事情?其实简单来说,就是从入口文件开始,不断寻找依赖,同时为了解析各种不同的文件加载相应的loader,最后生成我们希望的

微信测试工程师手把手教你做弱网络模拟测试

微信测试工程师手把手教你做弱网络模拟测试 Posted by 腾讯优测 | 3,152 views 小优有话说: app研发不同于实验室里做研究,哪里有"理想环境". 理想里,用户用着性能卓越的手机,连着畅通无阻的wifi网络. "哇塞!这个app好用到飞起!" 现实是,他们可能正用着你闻所未闻的机型,穿梭于地铁.公交.火车.乡间.大山-.. 信号"若隐若现,扑朔迷离" "我去!又crash了!" "唉,怎么又连不上

[转]vue全面介绍--全家桶、项目实例

慢慢了解vue及其全家桶的过程 原文http://blog.csdn.net/zhenghao35791/article/details/67639415 简介 “简单却不失优雅,小巧而不乏大匠”. 2016年最火的前端框架当属Vue.js了,很多使用过vue的程序员这样评价它,“vue.js兼具angular.js和React.js的优点,并剔除了它们的缺点”.授予了这么高的评价的vue.js,也是开源世界华人的骄傲,因为它的作者是位中国人–尤雨溪(Evan You). Vue.js 是一个J

vue全面介绍--全家桶、项目实例

简介 "简单却不失优雅,小巧而不乏大匠". 2016年最火的前端框架当属Vue.js了,很多使用过vue的程序员这样评价它,"vue.js兼具angular.js和react.js的优点,并剔除了它们的缺点".授予了这么高的评价的vue.js,也是开源世界华人的骄傲,因为它的作者是位中国人–尤雨溪(Evan You). Vue.js 是一个JavaScriptMVVM库,是一套构建用户界面的渐进式框架.它是以数据驱动和组件化的思想构建的,采用自底向上增量开发的设计.