react知识(一)React.createClass Vs React.Component
来源:互联网 发布:网站信息采集到数据库 编辑:程序博客网 时间:2024/05/17 12:04
如果是通过看react视频学习的同仁们会发现,有的视频是通过React.createClass来讲解sample 有的视频是用React.component来开发sample,那俩者之间有啥差别呢。
前面讲解的主要是环境搭建方面的,现在我们开始关注下React组件本身:
createClass是React以前版本的写法,现在Facebook官方逐渐废弃,所以尽量使用React.component来定义:
我们现在看下createClass的一个典型写法的例子:
import React,{Component} from 'react';var ClickCount = React.createClass({//初始化state getInitState: function () { return {count: 0} }, //点击事件 将state里的count进行累加 _handleClick: function () { this.setState(this.state.count + 1); }, render: function () { return ( <div> <h1>计数器:{this.state.count}</h1> <button onClick={this._handleClick}>点击计数</button> </div> ) }});export default ClickCount;
如果改成ES6的写法:
差别一:ES6 Class 语法比起传统的对象字面量更为简洁。对于方法的定义不需要再使用 function 关键字,也不需要 , 来分开多个方法。
before
var ClickCount = React.createClass({ render: function () { return ...; }})
after
var ClickCount extends React.component{ render(){ return ...; }}
差别二:将初始 state 定义移动到构造函数中
before:
var ClickCount = React.createClass({ //初始化state getInitState: function () { return {count: 0} }, ... })
after:
var ClickCount extends React.component{ constructor(prop){ super(prop); this.state={count:0}; }}
差别三:绑定实例方法和回调到实例上
比如前面例子中的 _handleClick 方法里的 this 将会指向当前这个组件实例。当使用 ES6 Class 语法的时候,我们必须要手动为这些方法绑定执行上下文
before:
var ClickCount = React.createClass({ //初始化state ... //点击事件 将state里的count进行累加 _handleClick: function () { console.log(this); console.log(this.state); this.setState(this.state.count + 1); }, render: function () { return ( <div> <h1>计数器:{this.state.count}</h1> <button onClick={this._handleClick}>点击计数</button> </div> ) } }
点击按钮的时候会调用_handleClick方法,而且输出this与this.state都是可以的。我们来看下es6:
class ClickCounter extends Component{ constructor(prop){ super(prop); //先将这句话屏蔽掉 //this._handleClick=this._handleClick.bind(this); this.state={count:0}; } _handleClick(){ //输出null console.log(this); //报错误 state of null console.log(this.state) this.setState({count:this.state.count+1}); } render(){ return ( <div> <button onClick={this._handleClick}>click Me</button> <h1>click Count{this.state.count}</h1> </div> ) }}
所以es6的写法需要在constructor【构造】函数里面,进行手动绑定this对象
this._handleClick=this._handleClick.bind(this);
如果存在多个事件需要绑定时,操作是比较繁琐的:
before:
class ExampleComponent extends React.Component { constructor() { super(); this._handleClick = this._handleClick.bind(this); this._handleFoo = this._handleFoo.bind(this); } // ...}
after:
class ExampleComponent extends React.Commponent{ _bind(...methods){ methods.forEach((method)=>this[method]=this[method].bind(this)); } constructor(){ this._bind('_handleClick', '_handleFoo'); }}
阅读全文
0 0
- react知识(一)React.createClass Vs React.Component
- React.createClass versus extends React.Component
- React.createClass 对决 extends React.Component
- React.createClass
- React createClass 和 Component 有什么区别
- React.createClass和extends Component的区别
- React:createClass 和 extends Component的区别
- React.createClass和extends Component的区别
- React.createClass( ) 和 React.Component( ) 有什么区别?
- React入门 createClass使用说明
- react---react组件创建,通过React.createClass方法与class App extends Component方法的区别
- react---react组件创建,通过React.createClass方法与class App extends Component方法的区别
- React学习笔记(2)-React.createClass、this.props.children
- 【React】React.Component小结
- react(一):初识react
- React Component Lifecycle(生命周期)
- React Component Lifecycle(生命周期)
- React.js学习知识小结(一)
- IP地址分类
- 20170710总结
- python不可变性和可变性的区别
- CentOS7下配置JDK
- C/C++调试笔记:空指针报错The inferior stopped because it received a signal from the operating system.
- react知识(一)React.createClass Vs React.Component
- 防火墙规则设置
- datepicker 日期控件的js校验(version-input.jsp)
- 数据库单表查询超时,重建索引失败。
- Java实现怎样hashcode
- python高级特性与高阶函数
- 基于jQuery的遍历同id元素 并响应事件的代码
- “一一配对”概念让5千年都无人能识的自然数一下子暴露出来 ——无穷集{0,1,2,…,p,…}只是N的真子集
- 字符编码