vlambda博客
学习文章列表

15. React 中 Component 的三种写法

一天一个小技巧,小轻今天给大家介绍的是:React中组件的三种写法。


奉上封面图



概念介绍


ES5 - React.createClass

最早的实现方法,目前应该比较少用了。仅做了解即可

ES6 - React.Component

有状态组件的写法,目前用的比较多

纯组件 / 函数组件 / 无状态组件 

无状态组件的写法,目前用的比较多

ES5 - React.createClass
很早之前的写法,目前用的比较少了
15. React 中 Component 的三种写法
基本构成
对象必须声明一个 render 方法,render 返回组件实例。

默认值设置使用 getDefaultProps 方法

初始化 state 使用 getInitialState 方法

15. React 中 Component 的三种写法
上代码
  
    
    
  
// 输出一个 Hello World 示例 var React = require('react'); var ReactDOM = require('react-dom');
var SayHello = React.createClass({   getDefaultProps: function() {     return { words: "Hello World" }   }      getInitialState: function() {     return { words: this.props.words }   }
render: function() {     return <div> {this.state.words} </div>   } });
ReactDOM.render( <SayHello />,   document.getElementById("root") );

ES6 - React.Component
React 支持 ES6 语法之后,就可以使用了。React > v0.13
15. React 中 Component 的三种写法
基本构成
使用 constructor 继承 props 和定义 state,比 ES5-createClass 写法简单

因为有生命周期,所以称为有状态组件。

15. React 中 Component 的三种写法
上代码
  
    
    
  
// 输出一个 Hello World 示例 import React from 'react'; import { render } from 'react-dom';
class SayHello extends React.Componet {   constructor(props) {     super(props)     this.state = {       words: this.props.words     }     // 此处也可以绑定 this, 然后就可以在 function 里面使用 this.state等     // this.defineFunc = this.defineFunc.bind(this);   };      render() {    return <div> {this.state.words} </div>   } };
// 设置默认props SayHello.defaultProps = {   words: "Hello World" }
render( <SayHello />,   document.getElementById("root') );

纯组件/函数组件/无状态组件
在开发过程中,有时候会遇到不需要状态控制的组件,仅仅用作展示使用,这类组件可以使用纯组件/函数组件来定义,更加方便。React > v0.14
15. React 中 Component 的三种写法
基本构成
没有生命周期

没有自己的 Props 和 State

15. React 中 Component 的三种写法
上代码
  
    
    
  
// 输出一个 Hello World 示例 const SayHello = ({ ...props }) => (   <div> {props.words} </div> )
// 使用方法,在父组件中定义 words,定义什么就显示什么 <SayHello words="Hello World" />

三者使用比较
从以下几个点上来简单做一下比较
15. React 中 Component 的三种写法
性能
纯组件 > ES6 - React.Component > ES5 - React.createClass

从基本构成上可以分析出来:

  • 纯组件不需要额外绑定 this , 不会被实例化
  • React.Component 可以选择性的绑定 (bind) this
  • React.createClass 则是自动绑定

15. React 中 Component 的三种写法
可读性
纯组件 > ES6 - React.Component > ES5 - React.createClass

15. React 中 Component 的三种写法
推荐使用频率
纯组件 > ES6 - React.Component > ES5 - createClass

当然,有人喜欢将组件都定义为 React.Component,这样做也可以,但是在性能上会稍微有点影响。

15. React 中 Component 的三种写法
state 的配置
  • 纯组件无法使用 this.state,本身没有 state
  • React.Component 在 contructor 里面通过 this.state 设置
  • React.createClass 使用 getInitialState 设置

default props 的配置




  • 纯组件:从父组件 / 高阶组件 接收
  • React.Component:在 constructor 里面通过 super 继承,使用defaultProps 定义
  • React.createClass:在 getDefaultProps 里面定义



快乐分享
如果你觉得快乐的,请分享给你的朋友哦~

笔者联系方式
如有特殊需要(想分享自己的图片等),请发送邮件至我们的邮箱
[email protected]
我们的工作人员会在第一时间联系您。