修饰器&高阶组件

一、修饰器

1、类的修饰

修饰器是一个函数,用来修改类的行为

复制代码
function testable(target) {
  target.isTestable = true;
}

@testable
class MyTestableClass {
  // ...
}

MyTestableClass.isTestable // true
复制代码

注意:

修饰器函数的第一个参数,就是所要修饰的目标类

如果有多余参数,只能修饰器外面封装一层函数

复制代码
function testable(isTestable) {
  return function(target) {
    target.isTestable = isTestable;
  }
}

@testable(true)
class MyTestableClass {}
MyTestableClass.isTestable // true

@testable(false)
class MyClass {}
MyClass.isTestable // false
复制代码

2、方法的修饰

例如:

@bind

修饰器只能用于类和类的方法,不能用于函数,因为存在函数提升。

二、高阶组件

高阶函数:接受函数作为输入,输出一个新的函数
高阶组件:接受react组件作为输入,输出一个新的react组件
通俗讲:在普通组件外面包一层逻辑,就是高阶组件
将功能相同或者相似的代码提取出来封装成一个可公用的函数或者对象

复制代码
import React from 'react';

export default function withHeader(WrappedComponent) {
  return class HOC extends React.Component {
    static displayName = `HOC(${WrappedComponent.displayName || WrappedComponent.name})`

    state = {}

    render() {
      return (
        <div>
          <div className="demo-header">
            我是标题
          </div>
          <WrappedComponent {...this.props} />
        </div>
      );
    }
  };
}
复制代码

 

复制代码
import React from 'react';
import withHeader from '../decorator';

@withHeader
export default class Demo extends React.Component {
  render() {
    return (
      <div>
        我是一个普通组件
      </div>
    );
  }
}
复制代码

父组件和高阶组件区别:
高阶组件:可以封装公共逻辑,给当前组件传递方法属性,添加生命周期钩子,改善目前代码里业务逻辑和UI逻辑混杂在一起的现状
父组件:UI层的一些抽离

posted @   alisa.huang  阅读(446)  评论(0编辑  收藏  举报
编辑推荐:
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
点击右上角即可分享
微信分享提示