环境配置
新版的React要求统一使用babel作为JSX的编译工具,因此我们选择babel,新建.babelrc文件,内容如下
{
"presets":["es2015","react"] //设置候选版本为es6和react-jsx
}
这里因为要用到ES6,所以把在babel候选版本里加入对ES6的支持
React组件
React里引入的组件这个概念:
React里的组件就像Android,ios里的控件一样,能方便快捷的作为界面的一部分实现一定功能,我们可以把数据传入:
var Hello = React.createClass({
render: function () {
return (
<div>
<h1>
{this.props.name}
</h1>
</div>
);
}
});
这里我们用React.createClass方法创建了一个React组件,render函数的返回值为要渲染的内容。
同样的组件我们用ES6实现如下:
class Hello extends React.Component {
render() {
return (
<div>
<h1>
{this.props.name}
</h1>
</div>
);
}
}
这里用到了ES6的class、extends等关键词
接下来我们用ReactDOM.render方法将其render到页面上
let names = [
'flypie ',
'flyboy '
];
ReactDOM.render(
<Hello name={names}/>,
document.body
);
组件的生命周期
组件的生命周期分成三个状态:
Mounting:已插入真实 DOM
Updating:正在被重新渲染
Unmounting:已移出真实 DOM
React 为每个状态都提供了两种处理函数,will 函数在进入状态之前调用,did 函数在进入状态之后调用,三种状态共计五种处理函数。
componentWillMount()
componentDidMount()
componentWillUpdate(object nextProps, object nextState)
componentDidUpdate(object prevProps, object prevState)
componentWillUnmount()
下图是官方文档里对各种函数执行位置的表述
这里我们做个实验:
let Hello = React.createClass({
getInitialState: function () {
console.log('getInitialState');
return {};
},
getDefaultProps: function () {
console.log('getDefaultProps');
return {};
},
componentWillMount: function () {
console.log('componentWillMount');
},
componentDidMount: function () {
console.log('componentDidMount');
},
componentWillReceiveProps: function () {
console.log('componentWillReceiveProps');
},
shouldComponentUpdate: function () {
console.log('shouldComponentUpdate');
return true;
},
componentWillUpdate:function(){
console.log('componentWillUpdate');
},
componentDidUpdate:function(){
console.log('componentDidUpdate');
},
componentWillUnmount:function(){
console.log('componentWillUnmount');
},
render: function () {
return (
<div>
<h1>
{this.props.name}
</h1>
</div>
);
}
});
let names = [
'flypie ',
'flyboy '
];
ReactDOM.render(
<Hello name={names}/>,
document.body
);
运行程序,控制台输出结果如下:
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。