1. 语法区别

  2. propType 和 getDefaultProps

  3. 状态的区别

  4. this区别

  5. Mixins

语法区别

React.createClass

import React from 'react';const Contacts = React.createClass({  render() {return (<div></div>);}
});export default Contacts;  

React.Component

import React from 'react';class Contacts extends React.Component {  constructor(props) {super(props);}render() {return (<div></div>);}
}export default Contacts; 

后一种方法使用ES6的语法,用constructor构造器来构造默认的属性和状态。

propType 和 getDefaultProps

React.createClass:通过proTypes对象和getDefaultProps()方法来设置和获取props.

import React from 'react';const Contacts = React.createClass({  propTypes: {name: React.PropTypes.string},getDefaultProps() {return {};},render() {return (<div></div>);}
});export default Contacts;  

React.Component:通过设置两个属性propTypesdefaultProps

import React form 'react';
class TodoItem extends React.Component{static propTypes = { // as static propertyname: React.PropTypes.string};static defaultProps = { // as static propertyname: ''};constructor(props){super(props)}render(){return <div></div>}
}

状态的区别

React.createClass:通过getInitialState()方法返回一个包含初始值的对象

import React from 'react';
let TodoItem = React.createClass({// return an object
    getInitialState(){ return {isEditing: false}}render(){return <div></div>}
})

React.Component:通过constructor设置初始状态

import React from 'react';
class TodoItem extends React.Component{constructor(props){super(props);this.state = { // define this.state in constructorisEditing: false} }render(){return <div></div>}
}

this区别

React.createClass:会正确绑定this

import React from 'react';const Contacts = React.createClass({  handleClick() {console.log(this); // React Component instance
  },render() {return (<div onClick={this.handleClick}></div>//会切换到正确的this上下文
    );}
});export default Contacts;  

React.Component:由于使用了 ES6,这里会有些微不同,属性并不会自动绑定到 React 类的实例上。

import React from 'react';
class TodoItem extends React.Component{constructor(props){super(props);}handleClick(){console.log(this); // null
    }handleFocus(){  // manually bind thisconsole.log(this); // React Component Instance
    }handleBlur: ()=>{  // use arrow functionconsole.log(this); // React Component Instance
    }render(){return <input onClick={this.handleClick} onFocus={this.handleFocus.bind(this)}  onBlur={this.handleBlur}/>}
}

我们还可以在 constructor 中来改变 this.handleClick 执行的上下文,这应该是相对上面一种来说更好的办法,万一我们需要改变语法结构,这种方式完全不需要去改动 JSX 的部分:

import React from 'react';class Contacts extends React.Component {  constructor(props) {super(props);this.handleClick = this.handleClick.bind(this);}handleClick() {console.log(this); // React Component instance
  }render() {return (<div onClick={this.handleClick}></div>);}
}export default Contacts;  

Mixins

如果我们使用 ES6 的方式来创建组件,那么 React mixins 的特性将不能被使用了。

React.createClass:使用 React.createClass 的话,我们可以在创建组件时添加一个叫做 mixins 的属性,并将可供混合的类的集合以数组的形式赋给 mixins

import React from 'react';
let MyMixin = {doSomething(){}
}
let TodoItem = React.createClass({mixins: [MyMixin], // add mixin
    render(){return <div></div>}
})

转载于:https://www.cnblogs.com/liuna/p/7232674.html

React.createClass和extends Component的区别相关推荐

  1. [react] React.createClass和extends Component的区别有哪些?

    [react] React.createClass和extends Component的区别有哪些? 1.语法 React.createClass和extends采用函数构造 extends Comp ...

  2. 转载 React.createClass 对决 extends React.Component

    先给出结论,这其实是殊途同归的两种方式.过去我们一般都会使用 React.createClass 方法来创建组件,但基于 ES6 的小小语法糖,我们还可以通过 extends React.Compon ...

  3. React 的 PureComponent Vs Component

    一.它们几乎完全相同,但是PureComponent通过prop和state的浅比较来实现shouldComponentUpdate,某些情况下可以用PureComponent提升性能 1.所谓浅比较 ...

  4. PureComponent与Component的区别

    PureComponent PureComponent是组件开发中的重要概念,组件开发人员需要深度理解相关概念. 组件:里面写的是html PureComponent大组件big PureCompon ...

  5. React中PureComponent和Component异同

        它们几乎完全相同,但是PureComponent通过prop和state的浅比较来实现shouldComponentUpdate,某些情况下可以用PureComponent提升性能 所谓浅比较 ...

  6. React Native之(var和let区别 )(简单解构)(map对象遍历)(可变顺序参数和不可以变顺序参数函数)

    1 var和let区别 let左右范围在块里面,var定义的变量可提升,用let声明的变量不可以声明2次 2 简单解构 let [a, b, c] = [1, 2, 3]; 3  map对象遍历 co ...

  7. Java 泛型中? super T和? extends T的区别

    原文链接          李璟(jlee381344197@gmail.com) 经常发现有List<? super T>.Set<? extends T>的声明,是什么意思 ...

  8. React中props与state的区别

    首先,props与state是React组件的两种方法. props,可以在组件中来获取this.props的属性. var Helloreact=React.createClass({render: ...

  9. [react] useEffect和useLayoutEffect有什么区别?

    [react] useEffect和useLayoutEffect有什么区别? useEffect是异步的,所谓的异步就是利用requestIdleCallback,在浏览器空闲时间执行传入的call ...

最新文章

  1. hadoop 3 配置yarn
  2. mysql group by 分组查询
  3. 计算机网络 网络设备命令 数据链路层解析
  4. docker私有仓库harbor配置helm chart仓库(安装helm chart插件)
  5. 孝感职称计算机考试时间,孝感2017年职称计算机考试报名3月中下旬
  6. Study之2 Glance相关操作-devstack
  7. VMware10 安装centos6.7 设置NAT模式固定ip
  8. 成都东软学院php期末考试题,求大神。。。C语言期末项目答案。。。题在一楼。。。...
  9. windows7安装com口驱动_windows7系统u盘插电脑没有反应的解决方法
  10. java 日期只计算年月日大小_java 日期加减天数、月数、年数的计算方式
  11. 微信公众号开发_调用新闻查询接口_回复图文消息
  12. 什么是DOI和PMID
  13. 飞鸽传书2007绿色版EM为内部即时通讯
  14. c语言if常见的错误,C语言if语句的一些小错误
  15. 我的非计算机科班好友,斩获了十几个 offer
  16. 液晶显示屏模组工艺流程是什么,液晶显示模组生产流程的意义
  17. robotstudio试用期延长总结
  18. 常用卫星遥感影像数据源
  19. NXP SJA1124 spi转lin芯片驱动
  20. 椭圆参数方程中的θ(离心角Theta)

热门文章

  1. Elasticsearch的javaAPI之get,delete,bulk
  2. ubuntu下安装英汉词典——stardict
  3. 20道必须掌握的C++面试题
  4. Java基础篇:switch语句
  5. OpenCV(三) 图像的读取和显示
  6. viewport就是这回事
  7. java--迭代(三)foreach解析与字节码
  8. Linux Crontab定时任务
  9. 谈谈目前我对区块链(Blockchain)的认识
  10. 一个极其微小的优化想法