React笔记_(6)_react语法5

react的版本


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

react官方提倡用ES6。

 

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

mixin在es6中被摒弃掉了。

mixin:


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

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

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

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

 高阶组件:

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

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

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

 

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

首先说明一下实现思路。

1
2
3
4
5
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.新式写法增强了代码的规范性

 

源代码说明:点此下载

 

posted @   风来风往风伤(TiAmo)  阅读(284)  评论(0编辑  收藏  举报
编辑推荐:
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· AI 智能体引爆开源社区「GitHub 热点速览」
· Manus的开源复刻OpenManus初探
· 写一个简单的SQL生成工具
点击右上角即可分享
微信分享提示