这个例子主要用es6编写一个最简单的react组建,并用gulp将代码转换为浏览器能识别的es5代码
整个流程大致如下:
首先安装依赖:
cnpm install --save-dev babelify babel-preset-es2015 babel-preset-react browserify gulp vinyl-source-stream
cnpm install --save react react-dom
看一下目录结构
dist目录保存的事打包后的文件
我们写了两个react组建,放在components目录中
app.jsx:
import React,{Component} from 'react' class App extends Component{ constructor(props){ super(props) this.state={ count:0 } } componentDidMount(){ } addCount(){ let count = this.state.count; count++; this.setState({ count:count }) } render(){ return ( <div> <button onClick={this.addCount.bind(this)}>点我递增次数</button> <span>当前点击次数:{this.state.count}</span> </div> ) } } export default App
parent.jsx:
import App from "./app.jsx" import React,{Component} from 'react' class Parent extends Component{ render(){ return <div> <span>hellow,parent1000</span> <App/> </div> } } export default Parent;
入口文件为
app.js:
import React from 'react' import {render} from 'react-dom' import Parent from '../components/parent.jsx' console.log(activityId); render(<Parent />,document.getElementById("root"));
gulp打包文件:
var gulp = require("gulp"); var source = require("vinyl-source-stream"); var browserify = require("browserify"); var babelify = require("babelify"); gulp.task("react",function(){ return browserify('./src/app.js')//入口文件 .transform(babelify,{ presets:['es2015','react'] })//es6转es5,jsx转js .bundle()//合并 .pipe(source("bundle.js"))//打包,source的作用是把babelify的输出转化为gulp可以识别的输入 .pipe(gulp.dest('dist'))//输出目录 }); gulp.task('default',['react'])
在看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> <script src="node_modules/zepto/dist/zepto.js"></script> </head> <body> <div id="root"></div> <script src="dist/normal.js"></script> <script src="dist/bundle.js"></script> </body> </html>
最后的
<script src="dist/bundle.js"></script>
是引用的打包后的js文件 运行:gulp
dist目录下就会多一个文件
打开运行上面的html
每点击一次按钮次数就会递增1
这样,最基本的react项目就算构建完成了