React.createClass和extends Component的区别
语法区别
propType 和 getDefaultProps
状态的区别
this区别
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:通过设置两个属性propTypes
和defaultProps
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的区别相关推荐
- [react] React.createClass和extends Component的区别有哪些?
[react] React.createClass和extends Component的区别有哪些? 1.语法 React.createClass和extends采用函数构造 extends Comp ...
- 转载 React.createClass 对决 extends React.Component
先给出结论,这其实是殊途同归的两种方式.过去我们一般都会使用 React.createClass 方法来创建组件,但基于 ES6 的小小语法糖,我们还可以通过 extends React.Compon ...
- React 的 PureComponent Vs Component
一.它们几乎完全相同,但是PureComponent通过prop和state的浅比较来实现shouldComponentUpdate,某些情况下可以用PureComponent提升性能 1.所谓浅比较 ...
- PureComponent与Component的区别
PureComponent PureComponent是组件开发中的重要概念,组件开发人员需要深度理解相关概念. 组件:里面写的是html PureComponent大组件big PureCompon ...
- React中PureComponent和Component异同
它们几乎完全相同,但是PureComponent通过prop和state的浅比较来实现shouldComponentUpdate,某些情况下可以用PureComponent提升性能 所谓浅比较 ...
- React Native之(var和let区别 )(简单解构)(map对象遍历)(可变顺序参数和不可以变顺序参数函数)
1 var和let区别 let左右范围在块里面,var定义的变量可提升,用let声明的变量不可以声明2次 2 简单解构 let [a, b, c] = [1, 2, 3]; 3 map对象遍历 co ...
- Java 泛型中? super T和? extends T的区别
原文链接 李璟(jlee381344197@gmail.com) 经常发现有List<? super T>.Set<? extends T>的声明,是什么意思 ...
- React中props与state的区别
首先,props与state是React组件的两种方法. props,可以在组件中来获取this.props的属性. var Helloreact=React.createClass({render: ...
- [react] useEffect和useLayoutEffect有什么区别?
[react] useEffect和useLayoutEffect有什么区别? useEffect是异步的,所谓的异步就是利用requestIdleCallback,在浏览器空闲时间执行传入的call ...
最新文章
- hadoop 3 配置yarn
- mysql group by 分组查询
- 计算机网络 网络设备命令 数据链路层解析
- docker私有仓库harbor配置helm chart仓库(安装helm chart插件)
- 孝感职称计算机考试时间,孝感2017年职称计算机考试报名3月中下旬
- Study之2 Glance相关操作-devstack
- VMware10 安装centos6.7 设置NAT模式固定ip
- 成都东软学院php期末考试题,求大神。。。C语言期末项目答案。。。题在一楼。。。...
- windows7安装com口驱动_windows7系统u盘插电脑没有反应的解决方法
- java 日期只计算年月日大小_java 日期加减天数、月数、年数的计算方式
- 微信公众号开发_调用新闻查询接口_回复图文消息
- 什么是DOI和PMID
- 飞鸽传书2007绿色版EM为内部即时通讯
- c语言if常见的错误,C语言if语句的一些小错误
- 我的非计算机科班好友,斩获了十几个 offer
- 液晶显示屏模组工艺流程是什么,液晶显示模组生产流程的意义
- robotstudio试用期延长总结
- 常用卫星遥感影像数据源
- NXP SJA1124 spi转lin芯片驱动
- 椭圆参数方程中的θ(离心角Theta)