博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
React创建组件的三种方式
阅读量:5900 次
发布时间:2019-06-19

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

hot3.png

1.无状态函数式组建

无状态函数式组件,也就是你无法使用State,也无法使用组件的生命周期方法,这就决定了函数组件都是展示性组件,接收Props,渲染DOM,而不关注其他逻辑。

无状态函数式组件也是官方比较推荐的一种方式,尽量让底层的组件变成无状态函数式组件,也即组件尽量只用来显示数据,把数据操作的逻辑都放在顶层,然后从顶层把数据传到底层。

举个例子

//顶层代码import React,{Component} from 'react';  import ReactDOM from 'react-dom';  import Button from './component/props'    ReactDOM.render(      
, document.getElementById('body') ) //底层代码import React,{Component} from 'react'; export default function Button(props){ let {name} = props const sayHi = () => { alert(`Hi ${name}`); } return (

Hello, {name}

) }

2. es5原生方式(React.createClass)

React.createClass 是react刚开始推荐的创建组件的方式,这是ES5的原生的JavaScript来实现的React组件

举个例子

const Button = React.createClass({      propTypes: {         //②属性类型        name: React.PropTypes.string    },    defaultProps: {     //③属性默认值        name: ''    },    getInitialState: function() {  //①初始状态        return {            name: this.props.name|| 'name'        };    },    sayHi() {        alert(`Hi ${name}`);      }    render() {      return (        

Hello, {name}

); }});

3.继承React.Component(ES6形式)

React.Component 是以ES6的形式来创建react的组件的,是React目前极为推荐的创建有状态组件的方式。

举个例子

export default class Button extends React.Component {    static propTypes = {       //②属性类型        name: React.PropTypes.string    };    static defaultProps = {   //③属性默认值        name: ''    };    constructor(props) {        super(props);        this.state = { ①初始状态            name: props.name|| 'name'        };        // ES6 类中函数必须手动绑定        this.sayHi= this.sayHi.bind(this);    }    sayHi() {        alert(`Hi ${name}`)    }    render() {      return (        

Hello, {name}

); }}

 

React.createClass 与 React.Component 两种方法的区别

1. React.createClass 创建的组件,其每一个成员函数的this都有React自动绑定,任何时候使用,直接使用this.mothod即可,函数中的this会被正确设置。

React.Component 创建的组件,其成员函数不会自动绑定this,需要开发者手动绑定,否则this不能获取当前组件实例对象。

绑定this的方法:

    ①.this.sayHi= this.sayHi.bind(this); //构造函数中绑定(construtor)

    ②.<div onClick={this.handleClick.bind(this)}></div> //使用bind来绑定

    ③.<div onClick={()=>this.handleClick()}></div> //使用arrow function来绑定

2.初始化状态定义,对应代码中①的位置

3.初始化属性类型,对应代码中②的位置

4.初始化属性值,对应代码中③的位置

转载于:https://my.oschina.net/kimyeongnam/blog/1831932

你可能感兴趣的文章
视频直播点播nginx-rtmp开发手册中文版
查看>>
PHP队列的实现
查看>>
单点登录加验证码例子
查看>>
[T-SQL]从变量与数据类型说起
查看>>
occActiveX - ActiveX with OpenCASCADE
查看>>
BeanUtils\DBUtils
查看>>
python模块--os模块
查看>>
Java 数组在内存中的结构
查看>>
《关爱码农成长计划》第一期报告
查看>>
学习进度表 04
查看>>
谈谈javascript中的prototype与继承
查看>>
时序约束优先级_Vivado工程经验与各种时序约束技巧分享
查看>>
minio 并发数_MinIO 参数解析与限制
查看>>
flash back mysql_mysqlbinlog flashback 使用最佳实践
查看>>
mysql存储引擎模式_MySQL存储引擎
查看>>
python类 del_全面了解Python类的内置方法
查看>>
java jni 原理_使用JNI技术实现Java和C++的交互
查看>>
java 重写system.out_重写System.out.println(String x)方法
查看>>
配置ORACLE 11g绿色版客户端和PLSQL远程连接环境
查看>>
ASP.NET中 DataList(数据列表)的使用前台绑定
查看>>