修饰器&高阶组件

Posted alisadream

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了修饰器&高阶组件相关的知识,希望对你有一定的参考价值。

一、修饰器

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层的一些抽离






以上是关于修饰器&高阶组件的主要内容,如果未能解决你的问题,请参考以下文章

190401装饰器-高阶函数-闭包

装饰器详解

高阶组件

装饰器

FragmentContainer 与仅作为包装器的另一个 React 组件?

Python之装饰器