博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
React.createClass和extends Component的区别
阅读量:7223 次
发布时间:2019-06-29

本文共 3176 字,大约阅读时间需要 10 分钟。

  1. 语法区别

  2. propType 和 getDefaultProps

  3. 状态的区别

  4. this区别

  5. Mixins

 

语法区别

React.createClass

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

React.Component

import React from 'react';class Contacts extends React.Component {    constructor(props) {    super(props);  }  render() {    return (      
); }}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 (      
); }});export default Contacts;

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

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

状态的区别

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

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

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

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

this区别

React.createClass:会正确绑定this

import React from 'react';const Contacts = React.createClass({    handleClick() {    console.log(this); // React Component instance  },  render() {    return (      
//会切换到正确的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 this        console.log(this); // React Component Instance    }    handleBlur: ()=>{  // use arrow function        console.log(this); // React Component Instance    }    render(){        return     }}

我们还可以在 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 (      
); }}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 
}})

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

你可能感兴趣的文章
去掉导航栏的黑线
查看>>
怎样让html加载完毕后加载js代码
查看>>
piwik 案例介绍
查看>>
敏感字过滤
查看>>
为什么我们要从 NodeJS 迁移到 Ruby on Rails
查看>>
Android 文件式数据库Realm
查看>>
Linux 面试知识点笔记
查看>>
论flex布局和box布局的华为meta8手机自带浏览器的兼容
查看>>
dubbo与springcloud初识
查看>>
iis web.config 配置示例
查看>>
归并排序
查看>>
java 的转义字符
查看>>
SharedPreferences的使用注意事项
查看>>
sofa-pbrpc高级用法
查看>>
Oracle 函数返回表实例2种写法实例
查看>>
mysql数据库主从复制
查看>>
Shell标准输出、标准错误 >/dev/null 2>&1
查看>>
Android自定义对话框(Dialog)位置,大小
查看>>
设置python的默认编码为utf8
查看>>
简易sqlhelper-java
查看>>