浅谈ES6 class实现React Class
来源:互联网 发布:2017宏观经济数据 编辑:程序博客网 时间:2024/05/29 17:47
使用ES6 class可以以一个JavaScript类来定义React Class。
1、使用React.createClass:
var Counter = React.createClass({propTypes: {initial: React.PropTypes.number },getDefaultProps: function() { return {initial: 0};},getInitialState: function() {return {count: this.props.initial};},count: function() {this.setState({count: this.state.count + 1});},render() {return (<div onClick={this.count}>Click times: {this.state.count}</div>);}});ReactDOM.render(<Counter />, document.getElementById("timeBox"));
2、使用ES6 class:
class Counter extends React.Component {constructor(props) {super(props);this.state = {count: props.initial};}count() {this.setState({count: this.state.count + 1});}render() {return (<div onClick={this.count.bind(this)}>Click times:{this.state.count}</div>);}}Counter.propTypes = { initial: React.PropTypes.number };Counter.defaultProps = { initial: 0 };ReactDOM.render(<Counter />, document.getElementById("timeBox"));
3、使用ES6 class与React.createClass的不同:
① React.createClass提供getInitialState 方法,而ES6 class在构造函数里设置初始的state;
② React.createClass提供getDefaultProps方法和propTypes 属性,而propTypes 和 defaultProps 在ES6 class的构造函数里被定义为属性,而不是在class body里。
③ ES6 class中不会自动绑定this到实例上,必须显示的使用.bind(this) 或使用箭头函数 =>:
正确用法1:
<div onClick={this.count.bind(this)}>
正确用法2:
<div onClick={() => this.count()}>
错误用法:
<div onClick={this.count}>
建议在构造函数中绑定事件处理器,以便对于所有实例只需绑定一次:
constructor(props) {super(props);this.count =this.count.bind(this);this.state = {count: props.initial};}
直接使用:
<div onClick={this.count}>
4、无状态函数
1) 可以用JavaScript函数来定义React类,如使用无状态函数语法:
function MyBox(props) {return <div>Hello, {props.name}</div>;}ReactDOM.render(<MyBox name="react"/>, document.getElementById("timeBox"));
2) 可以使用ES6箭头函数来定义React类:
const MyBox = (props) => <div>Hello {props.name}</div>;ReactDOM.render(<MyBox name="react"/>, document.getElementById("timeBox"));
上述两种方法用于纯函数态的组件,必须没有保持任何内部状态,没有备份实例,也没有组件生命周期方法。
大多数组件都应该是无状态函数,如果可能,这将是推荐的模式。
3) 仍然可以以设置函数属性的方式来指定 propTypes 和 defaultProps:
① 用JavaScript函数:
function MyBox(props) {return <div>Hello, {props.name}</div>;}MyBox.propTypes = { name: React.PropTypes.string }; MyBox.defaultProps = { name: "react" }; ReactDOM.render(<MyBox name="react"/>, document.getElementById("timeBox"));
② 使用ES6箭头函数:
const MyBox = (props) => <div>Hello {props.name}</div>;MyBox.propTypes = { name: React.PropTypes.string }; MyBox.defaultProps = { name: "react" }; ReactDOM.render(<MyBox name="react"/>, document.getElementById("timeBox"));
2 0
- 浅谈ES6 class实现React Class
- ES6中class的实现
- ES6--Class
- ES6 Class
- ES6--class
- ES6-class
- 【ES6】class
- ES6新特性 Class的实现
- 浅谈es6+react
- ES6详解三:class
- ES6详解三:class
- ES6 Class 类
- javascript ES6之class
- 自学-ES6篇-Class
- es6中class学习
- ES6 class enum function
- 13、ES6 之class
- ES6 学习笔记 Class
- Spring 学习5--使用AOP统一处理日志
- AndroidStudio中创建AIDL Service(跨应用调用服务)
- 01-MySQL-索引的操作
- hisi_ISP调试个人记录笔记
- 售货员的难题(0411)
- 浅谈ES6 class实现React Class
- Spring集合的注入
- RxJava 系列学习
- 数据压缩知识点整理
- Android内核开发:浅析APK的安装过程
- JVM类加载机制学习记录
- STM32学习笔记(3):通用输入输出端口(GPIO Ports)
- HAWQ技术解析(十七) —— 最佳实践
- sexcms后台上传视频正常,但前台网页上传视频报500错误 解决方法