React与ES6系列:

  1. React与ES6(一)开篇介绍
  2. React和ES6(二)ES6的类和ES7的property initializer
  3. React与ES6(三)ES6类和方法绑定
  4. React与ES6(四)ES6如何处理React mixins

ES2015(也就是ES6)带来了很多新的语言特性。比如:类、箭头方法、rest参数、promise、generator等很多。如果你对ES6还不是很熟悉的话可以看这里

但是浏览器对于ES6的支持还不是很好。你可以看看这个ES6兼容表。显而易见的是不同浏览器对于ES6的兼容参差不齐。于是就有人想把ES6的代码转成ES5的不就可以兼容了吗。

这其中做的最好的就是Babel, 一个非常棒的工具。后面会详细的介绍如何使用。

准备开发环境

为了可以正常开发,那么就需要用到webpack。这个工具可以把模块和相关的依赖项都打包到一起。之后,只要在浏览器中引用打包的脚本。

  1. 首先你需要安装nodejs。如果你还没有安装的话,直接去官网下载最新的安装包安装即可。
  2. 接下来安装webpacknpm install webpack --save-dev
  3. 安装babel-loadernpm install babel-loader babel-preset-es2015 babel-preset-react --save。有了babel-loader和对应的preset,就可以把ES6的代码转换为ES5了。但是,之前还需要配置babel-loader
  4. 安装react以及相关包。npm install react react-dom --save

下面就是babel-loaderwebpack的配置。首先配置babel-loader否则webpack无法使用babel转码。

在根目录添加文件.babelrc,并在提其中添加如下内容:

{
"presets": ["es2015", "react"]
}

接下来配置webpack。在根目录创建文件webpack.config.js, 之后在文件中添加如下代码:

var webpack = require('webpack');
var path = require('path'); var BUILD_DIR = path.resolve(__dirname, 'src/client/public');
var APP_DIR = path.resolve(__dirname, 'src/client/app'); var config = {
entry: APP_DIR + '/index.jsx',
output: {
path: BUILD_DIR,
filename: 'bundle.js'
},
module: {
loaders: [
{
test: /\.jsx?/,
include: APP_DIR,
loader: 'babel'
}
]
}
}; module.exports = config;

最后,在package.json文件中的scripts节点下添加如下内容:

"scripts": {
"test": "echo \"Error: no test specified\" && exit 1",
"dev": "webpack -d --watch",
"build": "webpack -p"
},

现在可以运行命令npm run dev开始开发,这时webpack会监视源代码的改变,任何对源代码的修改都会触发重新打包的动作。

更多关于webpackbabel-loader的配置方面的内容请移步这里。本文不再多做介绍。

JSX和Babel

你可能已经注意到,我们使用的是.jsx后缀而不是js。JSX是ReactJs团队开发的一个JavaScript的扩展。点击这里查看更多关于JSX的内容。

使用ES6写第一个React组件

是不是已经等不及了。

先来看看项目结构:

project
|--src
|--client
|--app
|--public
|--index.html
|--.babelrc
|--package.json
|--webpack.config.js

app目录下创建一个文件index.jsx作为React项目的入口文件。之后添加hello-world.jsx文件。在其中添加如下代码:

import React from 'react'; // 1

// 2
export default class HelloWorld extends React.Component {
// 3
render() {
// 4
return <h1>Hello from {this.props.phrase}</h1>
}
}

解释一下上面的代码:

  1. 把React库import引入到React变量中。
  2. 定义了一个我们自己的组件HelloWorld,这个组件继承(extends)自React.Component注意:在类的前面还有关键字export default,在别的模块中import并使用HelloWorld组件。
  3. 覆盖React组件的render方法。
  4. render方法返回JSX定义的html元素,这个元素内部显示的文本通过解析this.props.phrase获得。

组合到一起

在之前已经创建好的index.js文件内添加如下内容:

import React from 'react';
import {render} from 'react-dom'; import HelloWorld from './hello-world'; class App extends React.Component {
render() {
return (<div>
<HelloWorld phrase="ES2015" />
</div>);
}
} render(<App />, document.getElementById('app'));

打开index.html文件,如果你还没有创建这个文件的话,那么创建一个。目录位置参考前面的项目目录一节。在index.html文件中添加如下内容:

<html>
<head>
<meta charset="utf-8">
<title>React & ES6</title>
</head>
<body>
<div id="app" />
<script src="public/bundle.js" type="text/javascript"></script>
</body>
</html>

所需要的全部材料都有了。现在就可以用webpack打包了。运行命令npm run dev,稍后js代码就会转码,打包到bundle.js文件中了。

在浏览器中打开这个html文件。你就会看到运行结果了。

React与ES6(一)开篇介绍的更多相关文章

  1. React与ES6(四)ES6如何处理React mixins

    React与ES6系列: React与ES6(一)开篇介绍 React和ES6(二)ES6的类和ES7的property initializer React与ES6(三)ES6类和方法绑定 React ...

  2. React与ES6(三)ES6类和方法绑定

    React与ES6系列: React与ES6(一)开篇介绍 React和ES6(二)ES6的类和ES7的property initializer React与ES6(三)ES6类和方法绑定 React ...

  3. React和ES6(二)ES6的类和ES7的property initializer

    React与ES6系列: React与ES6(一)开篇介绍 React和ES6(二)ES6的类和ES7的property initializer React与ES6(三)ES6类和方法绑定 React ...

  4. webpack+react+redux+es6开发模式

    一.预备知识 node, npm, react, redux, es6, webpack 二.学习资源 ECMAScript 6入门 React和Redux的连接react-redux Redux 入 ...

  5. webpack+react+redux+es6

    一.预备知识 node, npm, react, redux, es6, webpack 二.学习资源 ECMAScript 6入门 React和Redux的连接react-redux Redux 入 ...

  6. webpack+react+redux+es6开发模式---续

    一.前言 之前介绍了webpack+react+redux+es6开发模式 ,这个项目对于一个独立的功能节点来说是没有问题的.假如伴随着源源不断的需求,前段项目会涌现出更多的功能节点,需要独立部署运行 ...

  7. React 和 ES6 工作流之 Webpack的使用(第六部分)

    这是React和ECMAScript2015系列文章的最后一篇,我们将继续探索React 和 Webpack的使用. 下面是所有系列文章章节的链接: React . ES6 - 介绍(第一部分) Re ...

  8. ABP理论学习之开篇介绍

    返回总目录 为了和2016年春节赛跑,完成该系列博客,我牺牲了今天中午的时间来完成该系列的第一篇----开篇介绍.开篇介绍嘛,读过大学教材的同学都知道,这玩意总是那么无聊,跟考试没关系,干脆直接跳过, ...

  9. scss + react + webpack + es6

    scss + react + webpack + es6 写在前面: 刚学习完慕课网里的一个幻灯片案例,自己加了刚学的react,两者结合.首先让大家看看效果 点击此处 你可以先用纯js实现上面的效果 ...

随机推荐

  1. Sublime Text对Python代码加注释的快捷键

    一直在Coursera上补基础课,发现很多课程都用Python作为教学语言,学了一下感觉果然好,简直是用英语在写代码.(我建Python目录的时候发现去年学过一点点Python,居然一点都不记得了= ...

  2. Karma: 3 - 测试覆盖率

    karma 的插件 karma-coverage 提供了测试代码覆盖率的支持. karma 的页面:http://karma-runner.github.io/0.8/config/coverage. ...

  3. Protractor

    官网地址:http://www.protractortest.org/ 1. 预备环境 protractor 是一个 Node.js 程序,为了运行 protractor ,你首先需要 Node 环境 ...

  4. floyd

    求任意两点之间的最短路径.e[i][j]为记录从i到j之间的距离,当循环结束后最后存储的就是i到j之间的最短路径啦. floyd算法就是对于给定的n个结点,对于每一个e[i][j],都让它经过1,然后 ...

  5. IOS 关于扬声器和听话筒的设置 ----自己试验过的,可以达到扩音器和听筒播放的效果

    今下午项目中使用到了 扬声器和听筒的设置,我项目中是这样的,有一个聊天设置,聊天设置有一个使用扬声器 播放声音的设置. 这个设置是,当你打开那个开关的话,你在聊天中都可以根据你的使用来任意的播放声音, ...

  6. Loadrunner:LR提交JSON格式的POST请求

    场景: 影视分发:影院客户端向管理平台发起取任务的操作,取任务接口getDispatchTask,为JSON格式的POST请求 Action() { web_custom_request(" ...

  7. eclipse与myeclipse恢复已删除的文件和代码

    1.类文件的恢复 选择项目后右键-->选择Restore from Local history-->出现下面的界面: 勾选后按Restore就恢复了,真的很强大很方便:但我没有就此罢手,我 ...

  8. 并查集(HDOJ 1856)

    并查集   英文:Disjoint Set,即“不相交集合” 将编号分别为1…N的N个对象划分为不相交集合, 在每个集合中,选择其中某个元素代表所在集合. 常见两种操作: n       合并两个集合 ...

  9. SQL:将字符串以特定字符分割并返回Table

    split 语法 ALTER FUNCTION [dbo].[F_SPLIT] ( @str VARCHAR(MAX) , ) ) /********************************* ...

  10. css部分的复习

    常见的块元素有<h1><h6>.<p><div><ul><li><ol>等,其中<div>标记是最典型的 ...