风华正茂、时光流逝、真爱时光、努力创建辉煌。

【react】---高阶组件的介绍及使用

 

 

高阶组件:
        高阶组件其实就是一个函数。  它接收一个组件做为参数,返回一个相对性增强的组件

    作用
        属性代理
        反向继承
 
高阶组件(high-order component)类似于高阶函数,接收 React 组件作为输入,输出一个新的 React 组件。高阶组件让代码更具有复用性、逻辑性与抽象特征。可以对 render 方法作劫持,也可以控制 props 与 state。

 

 

 


 

 

简单的介绍一下高阶组件:
  header组件没有的某些功能的,通过高阶组件就会拥有某些功能,但是这个功能不属于它。

 

 使用高阶组件,

 

 

 高阶组件内部结构解析

 

 

 

高阶组件的使用:
需要使用高阶组件的组件中引入高阶组件,导出高阶组件且把该组件作为参数导出,经过高阶组件的输入输出,记住,高阶组件处理后的(使用高阶组件)组件不在是之前的那个组件了,它是一个新的组件,拥有原先的功能,增加了某些东东。

 

 

大白话解析高阶组件:

首先看概念一下:
高阶组件:
        高阶组件其实就是一个函数。  它接收一个组件做为参数,返回一个相对性增强的组件
 
 
解析:
0.1函数
(WrapperComponent)=>{
 
 
    }
 
 
0.2接收组件为参数
 
headerhoc(Header);
 
 
 
0.3返回一个相对性增强的组件
 
 return class  extends WrapperComponent {   //通过return返回一个相对性增强的组件
        render() {  //render是渲染的意思
            this.state.dir = true;
            return (
                super.render()  //通过super. 就可以使用  (反向继承 ) 使用 继承组件的属性及方法
            )
        }
    }



一个组件,经过高阶组件处理之后,增强了某些功能,原本的功能还有,(那么高阶组件是如何处理的呢? 高阶组件根据你传入进来的组件,继承传入组件的功能及属性,然后添加某些功能或者属性,再通过return返回给你,然后再重新渲染,此时组件是新组件了 )

//

 

总结高阶组件的基本使用:
传入组件,向高阶组件传入该组件
高阶组件通过继承该组件,然后处理处理,再给返回该组件重新渲染。

 

 


 

 

高阶组件的另外一种用法:

柯里化,使用的方法

 

 

高阶组件,处理的方式

注意,这里返回的是继承Component的组件,这样就跟传入的组件是父子关系了。------这就涉及到了父传子的知识点了。

所有的组件都是通过继承Component的组件,而来的,所以说,他们都拥有一个共同的父亲,那么放在这里,

WrapperComponent与Component  不就是父子关系了吗???

 

 

总结:
高阶组件,通过继承Component的组件,与传入的组件成为父子关系,
在通过子通过参数高阶组件的函数传参进入高阶组件内部(用到了柯里化)
子组件(传入的组件)通过this.props 接收高阶组件(类似父组件)传入的值做修改

 

 


 

 

1、高阶组件的属性代理的理解

0.1 header组件在App组件中做标签使用,现在给header组件自定义属性,传值(父传子),那么案例正常情况下,header组件内部就应该能够通过this.props 来接受了。但是....,下面供

 

 

0.2、按照父传子的形式是可以接收到App传递过来的值的,但是没有接收到,为什么没有接收到呢? 下面介绍

打印发现没有

 

 

 0.3 因为header组件使用了高阶组件,返回的是一个新header组件了,不是原来的组件了,所以无法接收到App父组件传递传递过来的值。那么如何接收呢?  下面介绍...

 

 

0.4 通过给高阶组件设置属性代理  { ... this.props }  把接收到的值代理过去(把接收到的值解构赋值过去)

 

 //   通过在高阶组件中打印发现,这里可以接受到 App传递过来的值

 


 

2、高阶组件的 反向继承 的理解

 

反向继承的特点是,通过当前的高阶组件可以调用该组件任意...

 

 

 

 

super就代表调用父级的方式  (记住哦,返回的是一个新的组件)

 

 

 super.render 调用的是这一块内容。

 

 利用高阶组件来做  路由守卫 / 登录界面。

 

 

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

 

高阶组件的应用,在loading中使用,使用的是反向继承

one组件请求数据,当数据没有请求到时候,执行的是loading,当请求到之后就重新渲染 one组件

 

 高阶组件  内部结构,继承传入的组件,判断处理,(通过return啥就渲染啥的方式)

 

 


 

 

 

高阶组件与context的使用

这个是没有使用高阶组件之前,这样每次都要写比较麻烦。(three组件没有使用高阶组件之前,每次都需要引入还要写一大堆的代码,如何解决这问题呢?下面供...)

创建一个生产者(生产数据的咯)

 

 在哪里生产嗯?  在main.js中生产(为什么要在这里生产?目的是为了让下面更多使用咯!)这里生产了username:"Alley",age:20 (看清如何生产啊,别忘记了)

 

 使用高阶组件,处理context  中使用数据的麻烦/繁琐的事情(专门创建一个处理这个玩意的高阶组件,)(引入、包裹、函数返组件、)

 

 使用高阶组件,这样就可以使用高阶组件了,就可以获取到props的值了

 

 

 

 /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

0.1、生产数据设定

0.2、生产了数据

 

 

 

 0.3、

 

posted @ 2019-09-18 22:28  野马,程序源改造新Bug  阅读(651)  评论(0编辑  收藏  举报