高阶组件

高阶函数

高阶函数有如下特性:
1.函数可以作为参数被传递
2.函数可以作为返回值输出

作为参数被传递

这里通常的用法就是回调函数

var getUserInfo = function( userId, callback ){
  $.ajax( 'http://xx.com/getUserInfo?' + userId, function( data ){
    if ( typeof callback === 'function' ){
      callback( data );
    }
  });
}
getUserInfo( 123, function( data ){ 
  alert ( data.userName );
});

还可以将通用方法封装起来,将个性化操作放到回调函数中,在高阶函数中只需要判断所接收的参数是否函数即可。

var appendDiv = function( callback ){
  for ( var i = 0; i < 100; i++ ){
    var div = document.createElement( 'div' ); 
    div.innerHTML = i;
    document.body.appendChild( div );
    if ( typeof callback === 'function' ){
      callback( div );
    }
  }
};
appendDiv(function( node ){ 
  node.style.display = 'none';
});

作为返回值输出

var isType = function( type ){ 
  return function( obj ){
    return Object.prototype.toString.call( obj ) === '[object '+ type +']';
  }
};

var isString = isType( 'String' ); 
var isArray = isType( 'Array' ); 
var isNumber = isType( 'Number' );

console.log( isArray( [ 1, 2, 3 ] ) );    // 输出:true

高阶组件

高阶组件与高阶函数的功能类似,同样增强组件的复用性。

他大概长成这个样子:

const HOC = (InnerComponent) => class extends React.Component{//首字母大写!!

    render(){
        return(
            <InnerComponent
                {...this.props}
            />
        )
    }

}

const Button = HOC((props) => <button>{props.children}</button>) //无状态组件

class Label extends React.Component{//传统组件

    render(){
        return(
            <label>{this.props.children}</label>
        )
    }
}
const LabelHoc = HOC(Label)

class App extends React.Component{//根组件
    render(){
        return(
            <div>
                <Button>button</Button>
                <br/>
                <LabelHoc>label</LabelHoc>
            </div>
        )
    }
}
module.exports = App

HOC就是一个高阶组件,只要将其他组件作为参数传入,就可以使用高阶组件了。

注意,通过高阶组件注册的组件间互不影响。也就是说,如果在高阶组件中定义了一个state,不同组件作为参数传入时,这个state时各自独立的值。

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 前言 学习react已经有一段时间了,期间在阅读官方文档的基础上也看了不少文章,但感觉对很多东西的理解还是不够深刻...
    Srtian阅读 1,762评论 0 7
  • 如果一个函数操作其他函数,即将其他函数作为参数或将函数作为返回值,将其称为高阶函数。高阶组件(high-order...
    yuzhiyi_宇阅读 20,775评论 1 11
  • React进阶之高阶组件 前言 本文代码浅显易懂,思想深入实用。此属于react进阶用法,如果你还不了解react...
    流动码文阅读 1,239评论 0 1
  • 高阶组件是对既有组件进行包装,以增强既有组件的功能。其核心实现是一个无状态组件(函数),接收另一个组件作为参数,然...
    柏丘君阅读 3,220评论 0 6
  • markdown 方法:将 Markdown 文本转换为 HTML extensions参数:对 Markdown...
    一块大番薯阅读 272评论 0 0

友情链接更多精彩内容