利用ES6语法重构React组件详解

发布时间 - 2026-01-10 23:22:32    点击率:

一、创建组件

ES6 class创建的组件语法更加简明,也更符合javascript。内部的方法不需要使用function关键字。

React.createClass

import React from 'react';
const MyComponent = React.createClass({
 render: function() {
 return (
  <div>以前的方式创建的组件</div>
 );
 }
});
export default MyComponent;

React.Component(ES6)

import React,{ Component } from 'react';
class MyComponent extends Component {
 render() {
 return (
  <div>ES6方式创建的组件</div>
 );
 }
}
export default MyComponent;

二、属性

props propTypes and getDefaultProps

. 使用React.Component创建组件,需要通过在constructor中调用super()将props传递给React.Component 。另外react 0.13之后props必须是不可变的。

. 由于是用ES6 class语法创建组件,其内部只允许定义方法,而不能定义属性,class的属性只能定义在class之外。所以propTypes要写在组件外部。

. 对于之前的getDefaultProps方法,由于props不可变,所以现在被定义为一个属性,和propTypes一样,要定义在class外部。

React.createClass

import React from 'react';
const MyComponent = React.createClass({
 propTypes: {
 nameProp: React.PropTypes.string
 },
 getDefaultProps() {
 return {
  nameProp: ''
 };
 },
 render: function() {
 return (
  <div>以前的方式创建的组件</div>
 );
 }
});
export default MyComponent;

React.Component(ES6)

import React,{ Component } from 'react';
class MyComponent extends Component {
 constructor(props) {
 super(props);
 }
 
 render() {
 return (
  <div>ES6方式创建的组件</div>
 );
 }
}
MyComponent.propTypes = {
 nameProp: React.PropTypes.string
};
MyComponent.defaultProps = {
 nameProp: ''
};
export default MyComponent;

三、状态

. 使用ES6 class语法创建组件,初始化state的工作要在constructor中完成。不需要再调用getInitialState方法。这种语法更加的符合JavaScript语言习惯。

React.createClass

import React from 'react';
const MyComponent = React.createClass({
 getInitialState: function() {
 return { data: [] };
 },
 
 render: function() {
 return (
  <div>以前的方式创建的组件</div>
 );
 }
});
export default MyComponent;

React.Component(ES6)

import React,{ Component } from 'react';
class MyComponent extends Component {
 constructor(props) {
 super(props);
 this.state = { data: [] };
 }
 
 render() {
 return (
  <div>ES6方式创建的组件</div>
 );
 }
}
export default MyComponent;

四、this

. 使用ES6 class语法创建组件, class中的方法不会自动将this绑定到实例中。必须使用 .bind(this)或者 箭头函数 =>来进行手动绑定。

React.createClass

import React from 'react';
const MyComponent = React.createClass({
 handleClick: function() {
 console.log(this);
 },
 render: function() {
 return (
  <div onClick={this.handleClick}>以前的方式创建的组件</div>
 );
 }
});
export default MyComponent;

React.Component(ES6)

import React,{ Component } from 'react';
class MyComponent extends Component {
 handleClick() {
 console.log(this);
 }
 
 render() {
 return (
  <div onClick={this.handleClick.bind(this)}>ES6方式创建的组件</div>
 );
 }
}
export default MyComponent;

也可以将绑定方法写到constructor中:

import React,{ Component } from 'react';
class MyComponent extends Component {
 constructor(props) {
 super(props);
 this.handleClick = this.handleClick.bind(this);
 }
 handleClick() {
 console.log(this);
 }
 
 render() {
 return (
  <div onClick={this.handleClick}>ES6方式创建的组件</div>
 );
 }
}
export default MyComponent;

或者使用箭头函数 => :

import React,{ Component } from 'react';
class MyComponent extends Component {
 handleClick = () => {
 console.log(this);
 }
 
 render() {
 return (
  <div onClick={this.handleClick}>ES6方式创建的组件</div>
 );
 }
}
export default MyComponent;

五、Mixins

. 使用ES6语法来创建组件是不支持React mixins的,如果一定要使用React mixins就只能使用React.createClass方法来创建组件了。

import React,{ Component } from 'react';
var SetIntervalMixin = {
 doSomething: function() {
 console.log('do somethis...');
 },
};
const Contacts = React.createClass({
 mixins: [SetIntervalMixin],
 
 handleClick() {
 this.doSomething(); //使用mixin
 },
 render() {
 return (
  <div onClick={this.handleClick}></div>
 );
 }
});
export default Contacts;

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流,如果有疑问大家可以留言交流。


# react  # es6  # 组件  # 语法  # 使用 React Hooks 重构类组件的示例详解  # React组件重构之嵌套+继承及高阶组件详解  # 使用ES6语法重构React代码详解  # concent渐进式重构react应用使用详解  # 绑定  # 不需要  # 要在  # 有疑问  # 不支持  # 写到  # 这篇文章  # 不需  # 方法来  # 要再  # 也更  # 要写  # 只允许  # import  # const  # export  # gt  # div  # Component 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: Laravel Fortify是什么,和Jetstream有什么关系  什么是javascript作用域_全局和局部作用域有什么区别?  高防服务器租用首荐平台,企业级优惠套餐快速部署  如何在香港服务器上快速搭建免备案网站?  清除minerd进程的简单方法  Laravel如何使用Spatie Media Library_Laravel图片上传管理与缩略图生成【步骤】  Laravel Seeder填充数据教程_Laravel模型工厂Factory使用  实例解析Array和String方法  如何快速打造个性化非模板自助建站?  微信h5制作网站有哪些,免费微信H5页面制作工具?  JavaScript 输出显示内容(document.write、alert、innerHTML、console.log)  Microsoft Edge如何解决网页加载问题 Edge浏览器加载问题修复  瓜子二手车官方网站在线入口 瓜子二手车网页版官网通道入口  Laravel Debugbar怎么安装_Laravel调试工具栏配置指南  通义万相免费版怎么用_通义万相免费版使用方法详细指南【教程】  laravel怎么为API路由添加签名中间件保护_laravel API路由签名中间件保护方法  Android自定义控件实现温度旋转按钮效果  微信小程序 闭包写法详细介绍  Laravel Eloquent性能优化技巧_Laravel N+1查询问题解决  Laravel如何实现邮箱地址验证功能_Laravel邮件验证流程与配置  laravel怎么为应用开启和关闭维护模式_laravel应用维护模式开启与关闭方法  Laravel如何使用Gate和Policy进行授权?(权限控制)  宙斯浏览器怎么屏蔽图片浏览 节省手机流量使用设置方法  Laravel与Inertia.js怎么结合_使用Laravel和Inertia构建现代单页应用  香港服务器网站推广:SEO优化与外贸独立站搭建策略  宙斯浏览器视频悬浮窗怎么开启 边看视频边操作其他应用教程  如何在景安服务器上快速搭建个人网站?  智能起名网站制作软件有哪些,制作logo的软件?  如何在阿里云部署织梦网站?  韩国服务器如何优化跨境访问实现高效连接?  Win11摄像头无法使用怎么办_Win11相机隐私权限开启教程【详解】  Laravel如何使用withoutEvents方法临时禁用模型事件  音响网站制作视频教程,隆霸音响官方网站?  Angular 表单中正确绑定输入值以确保提交与验证正常工作  PHP正则匹配日期和时间(时间戳转换)的实例代码  Laravel集合Collection怎么用_Laravel集合常用函数详解  Laravel如何使用Sanctum进行API认证?(SPA实战)  如何在IIS管理器中快速创建并配置网站?  香港服务器WordPress建站指南:SEO优化与高效部署策略  零服务器AI建站解决方案:快速部署与云端平台低成本实践  创业网站制作流程,创业网站可靠吗?  Android 常见的图片加载框架详细介绍  Gemini手机端怎么发图片_Gemini手机端发图方法【步骤】  php嵌入式断网后怎么恢复_php检测网络重连并恢复硬件控制【操作】  如何在 Go 中优雅地映射具有动态字段的 JSON 对象到结构体  使用spring连接及操作mongodb3.0实例  浅析上传头像示例及其注意事项  js代码实现下拉菜单【推荐】  Java垃圾回收器的方法和原理总结  Laravel如何使用查询构建器?(Query Builder高级用法)