您的位置:首页 > Web前端 > React

ES6语法重构的react组件

2017-07-09 23:59 549 查看
最近在学习react,其创建组件的方式有两种,一种是基于es6语法,一种是通过React.createClass方法来创建的,由于两种方法有一些地方不同,所以导致起初写代码是有点蒙,再次总结一下两种的不同,同时本人更加推崇使用es6语法来书写。

创建组件

//React.createClass形式

import React from 'react';
const App = React.createClass({
render: function () {
return <div>组件</div>
}
});


个人感觉通过es6创建组件,结构更加清晰

//React.Component(ES6)形式

import React from 'react';

class App extends react.Component {
render() {
return (
<div>组件</div>
);
}
}


state

使用ES6 class语法创建组件,初始化state的工作要在constructor中完成。不能再调用getInitialState方法。

//react.createClass形式

import React from 'react';

const App = React.createClass({
getInitialState: function() {
return {
data: 1,
};
},

render: function() {
return (
<div>组件</div>
);
}
});


//React.Component(ES6)形式

import Reactfrom 'react';

class MyComponent extends React.Component {
constructor(props) {
super(props);
this.state = { data: 1 };
}

render() {
return (
<div>组件</div>
);
}
}


this问题

这个是之前最让我困惑的地方,在es6语法创建组件中,class中的方法不会自动将this绑定,需要使用bind方法来进行绑定。

//react.createClass形式

import React from 'react';

const App = React.createClass({
handleClick: function() {
console.log(this);
},
render: function() {
return (
<div onClick={this.handleClick}>组件</div>
);
}
});


//React.Component(ES6)形式

import React,{ Component } from 'react';

class App extends Component {
constructor(props) {
super(props);
this.handleClick = this.handleClick.bind(this);
}

handleClick() {
console.log(this);
}

render() {
return (
<div onClick={this.handleClick}>组件</div>
);
}
}


或者也可以使用箭头函数

class App extends Component {
handleClick = () => {
console.log(this);
}

render() {
return (
<div onClick={this.handleClick}>组件</div>
);
}
}


文章参考http://www.cnblogs.com/yongjz/p/5356914.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: