网创优客建站品牌官网
为成都网站建设公司企业提供高品质网站建设
热线:028-86922220
成都专业网站建设公司

定制建站费用3500元

符合中小企业对网站设计、功能常规化式的企业展示型网站建设

成都品牌网站建设

品牌网站建设费用6000元

本套餐主要针对企业品牌型网站、中高端设计、前端互动体验...

成都商城网站建设

商城网站建设费用8000元

商城网站建设因基本功能的需求不同费用上面也有很大的差别...

成都微信网站建设

手机微信网站建站3000元

手机微信网站开发、微信官网、微信商城网站...

建站知识

当前位置:首页 > 建站知识

什么是高阶组件HOC

这篇文章主要讲解了“什么是高阶组件HOC”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“什么是高阶组件HOC”吧!

在维西等地区,都构建了全面的区域性战略布局,加强发展的系统性、市场前瞻性、产品创新能力,以专注、极致的服务理念,为客户提供网站制作、网站建设 网站设计制作定制网站开发,公司网站建设,企业网站建设,品牌网站制作,营销型网站,外贸网站制作,维西网站建设费用合理。

高阶组件

简单来说,高阶组件可以看做一个函数,且该函数接受一个组件作为参数,并返回一个新的组件。

我在之前的博客《闭包和类》中提到一个观点,面向对象的好处就在于,易于理解,方便维护和复用。
其实高阶组件,也是为了更好地复用之前的组件。它可以理解为,基础组件通过包裹处理,生成一个适应某些场景的组件。
它可能存在于以下几种场景:

定制props

一个简单例子:

function withMoreThings(WrappedComponent) {  
  return class extends React.Component {
    render() {     
      const moreThings = {
          more: 'things',
      };
      return     
    }  
  } 
}

这是HOC(High Order Component)最常用的一种方式,用来传递一些定制化的参数给内部组件。

提取公共方法、属性

在to B的项目中,表单是一个大头,所有流程都绕不开表单。也就会说到受控组件和非受控组件。

受控组件

由于HTML表单元素会保留一些内部状态,比如input框,它会有自己内部的状态来保存用户的输入值。

此时,为了能够处理将React的state和表单元素的内部状态统一起来,React提供了一种称为“受控组件”的技术。

class NameInput extends React.Component {
  constructor(props) {
    super(props);
    this.state = {value: ''};

    this.handleChange = this.handleChange.bind(this);
  }

  handleChange(event) {
    console.log(this);
    this.setState({value: event.target.value});
  }

  render() {
    return (
      
    );
  }
}

通过内部的state和绑定change事件,就可以将input内部的处理机制转移到React的默认处理机制上,收到React的控制。
但是,还是有一些元素,不能使用这种方法,比如

这个元素是只读的,用户选择完毕后,可以获取到对应的文件。不能通过React内部的state来模拟。
这就引出了——

非受控组件

非受控组件从DOM中获取表单值,而不是通过React的state来处理。由于它不经过React的一些逻辑,所以不能对它的状态做监控。这里有一篇文章Controlled and uncontrolled form inputs in React don't have to be complicated介绍了何时可以使用非受控组件。
下面是一个非受控组件的例子:

import React, { Component } from "react";
export default class NameInput extends Component {
  constructor(props) {
    super(props);
  }

  handleChange(event) {
    console.log(this);
    this.setState({ value: event.target.value });
  }

  render() {
    return (
       (this.input = input)}
      />
    );
  }
}
 和  支持 defaultChecked,