react的版本


目前主要的react有 ES5,ES6.也有ES5和ES6混合编写的。比较混乱。

react官方提倡用ES6。

说到这里,就需要提到一个概念——mixin

mixin在es6中被摒弃掉了。

mixin:


简单来讲,就是部分公用的代码,提取出来作为一个独立的木块,

利用混入的方式来使用。这就是mixin。

es5里面,声明一个mixin单例对象,直接以数组方式插到组件使用即可;

es6不提倡这样的写法,而是使用高阶组件的方式实现。

高阶组件:

其实就是把一个类作为参数丢到另一个类(修饰类)中,

在这个类中将上一个类增加一点东西,然后再return返回去,

等于把上一个类的功能修饰增强了。

哎呀。概念好麻烦。还是看看代码怎么样实现吧。

首先说明一下实现思路。

1.我们用箭头函数,将组件类作为参数丢进去。

2.在这个函数内部,声明一个类,继承传进来的组件类。

3.加入新的属性和方法,然后返回类。

  

看下实现:

import React,{ Component } from 'react';
import ReactDOM from 'react-dom';
//待增强的类
class MyTest extends Component{
constructor(props){
super(props);
}
render(){
return (<button onClick={this.show.bind(this,this.props)}>click</button>);
}
}
//修饰函数,将类作为参数传入。
let IntervalEnhance = myComponent => {
//声明一个内部类。
// 注意,这个内部类不能有render方法,否则会将原类中的render覆盖。
class ES6_Mixin extends myComponent {
componentWillMount() {
console.log("渲染前");
this.timer = setInterval(function(){
console.log('不断打印中.....');
},500);
}
componentWillUnmount(){
console.log("销毁啦!");
clearInterval(this.timer);
}
show(obj){
console.log(obj);
}
}
//修饰后返回
return ES6_Mixin;
};
var EnhancedTest = IntervalEnhance(MyTest);
ReactDOM.render(<EnhancedTest myname={"zhangwei"} />,document.getElementById('app'));
//10s后销毁
setTimeout(function(){
ReactDOM.unmountComponentAtNode(document.getElementById("app"));
},10000);

说明:

1.MyTest这个类,被增强了计时器功能和show()方法。最后,我们用增强后的类作为新组件类,渲染到页面上。

2.es5版的mixin对象里如果有相同的周期函数,是可以先加载mixin的,然后再加载组件本身的,之间并不会有覆盖

3.高阶组件的做法弱化了之前mixin的功能。

4.新式写法增强了代码的规范性

源代码说明:点此下载

React笔记_(6)_react语法5的更多相关文章

  1. React笔记_(3)_react语法2

    React笔记_(3)_react语法2 state和refs props就是在render渲染时,向组件内传递的变量,这个传递是单向的,只能继承下来读取. 如何进行双向传递呢? state (状态机 ...

  2. React笔记_(2)_react语法1

    这一节内容主要以了解为主. 渐渐的体会react的语法和其特性. ① htmlAndJs 混合编写 react和以往的前后台书写方式不一样. 在之前的多个语言中,讲求的是将页面代码和js代码逻辑分开, ...

  3. React笔记_(5)_react语法4

    ajax 数据应用场景 在真实的开发环境中,拿到了产品需求,第一件事不是逼着后台开发人员先完成,然后前端再介入开发,这样太浪费时间. 正确的做法是跟后端人员先商量好接口名称,请求参数,返回的数据格式等 ...

  4. React笔记_(4)_react语法3

    生命周期 很多语言中都讲了关于生命周期.这可是决定生命的周始,有没有存在感的关键啊. 生命周期,有生有死,有始有终,因果轮回,循环往复.(说多了) react中,主要说明的是 一个组件的生命周期.简单 ...

  5. React笔记_(7)_react路由

    路由 路由(routing)是指分组从源到目的地时,决定端到端路径的网络范围的进程. 路由器当然是作为一个转发设备出现的,主要是转发数据包来实现网络互联. 那么react的路由到底指的是什么呢? 举个 ...

  6. React笔记_(1)_react概述

    React概述   React是一种很好的前端技术. 它将应用打散成独立的小模块,然后进行组装,完成开发. react远比angularjs难学的多. react依赖的如webpack等各种工具得先学 ...

  7. 运维开发笔记整理-Django模型语法

    运维开发笔记整理-Django模型语法 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.模型基本概念 1>.什么是模型 模型是你的数据唯一的,权威的信息源.它包含你所存储数 ...

  8. 《DOM Scripting》学习笔记-——第二章 js语法

    <Dom Scripting>学习笔记 第二章 Javascript语法 本章内容: 1.语句. 2.变量和数组. 3.运算符. 4.条件语句和循环语句. 5.函数和对象. 语句(stat ...

  9. 读经典——《CLR via C#》(Jeffrey Richter著) 笔记_发布者策略控制

    在 读经典——<CLR via C#>(Jeffrey Richter著) 笔记_高级管理控制(配置)中,是由程序集的发布者将程序集的一个新版本发送给管理员,后者安装程序集,并手动编辑应用 ...

随机推荐

  1. python or not python

    python or not python 我挺喜欢 python 这种编程语言,它本身的丰富的动态特性让这种语言的表达能力很强,基本上 python 上写的一行代码,可实现 java 上 1.5 到 ...

  2. 针对大的sql文件删除行操作

    今天处理开发已导出的库的一个sql文件.未gzip压缩 ,1.3G 需要删除 17 18 24行的SET行. 想到了两个办法 1  sed 方法 主意 由于 sed 虽然指定行 进行 替换, 也会读完 ...

  3. Android --Spinner--自定义Spinner

    主要参考博客Android 实现自定义Spinner 1.Spinner样式 <?xml version="1.0" encoding="utf-8"?& ...

  4. python_中文乱码问题

    1. 编码和解码的概念:    编码是将源对象内容按照一种标准转换为一种标准格式内容.    解码是和编码对应的,它使用和编码相同的标准将编码内容还原为最初的对象内容. 2. python中的编码和解 ...

  5. WPF 程序检测 windows 关机

    1.使用SessionEnding事件 参考MSDN. 2.在需要处理 关机事件中可以注册SessionEnding事件 App.Current.SessionEnding += Current_Se ...

  6. [PCL]keypoint

    1. Harris角点 http://www.cnblogs.com/ironstark/p/5064848.html 2. ISS关键点 http://www.cnblogs.com/ironsta ...

  7. JavaScript学习笔记之BOM

    BOM的核心对象是window,它既表示浏览器窗口以及页面可见区域,同时也是ECMAScript中的Globe对象,所有的全局变量和函数都是它的属性,并且所有的原声函数以及其他函数也都存在于它的命名空 ...

  8. 基于DES算法加密的防撞库密码系统项目总结

    项目内容:基于DES算法加密的防撞库密码系统 小组名:zqhzkzkj 目标:1.对用户输入的8位字符进行DES加密,要求用户输入8位密钥 2.对于不同的网站,不同的用户名生成不同的密码 小组成员:周 ...

  9. 在xocde运行profile 遇到"Existing default base temp directory '/Library/Caches/com.apple.dt.instruments' has insufficient privileges for user id 505. Please have the owner delete this directory"

    找到这篇文章 http://stackoverflow.com/questions/34153795/xcode-7-unable-to-open-instruments-from-developer ...

  10. start.s 解析(一)

    可以参考 : http://blog.csdn.net/bluesummerg/article/details/5940452 (强大的反汇编) http://www.cnblogs.com/yanh ...