482 字
2 分钟
高阶组件

高阶组件#

1.高阶组件定义#

高阶组件就是一个函数,且该函数接受一个组件作为参数,并返回一个新的组件

2.函数模拟高阶函数#

function banana() {
let name = 'wengkaimin';
console.log(`${name} likes banana`);
}
function apple(myName) {
let name = 'wengkaimin';
console.log(`${name} likes apple`);
}
banana();
apple();

以上有冗余的代码,在平时开发过程中可能会有一大堆 写一个中间函数来处理这个相同的代码

function banana(myName) {
console.log(`${myName} likes banana`);
}
function apple(myName) {
console.log(`${myName} likes apple`)
}
function getFruit(fun) {
let myFruit = (() => {
let myName = 'wengkaimin';
fun(myName);
})
return myFruit
}
banana = getFruit(banana);
apple = getFruit(apple);
banana();
apple();

getFruit函数就叫做一个高阶函数,他帮我们处理了前面两个函数的相同模块,帮忙把myName自动的加入了所有继承getFruit的函数,此场景在react中的高阶组件有广泛的应用。

3.react中的高阶组件#

改成react高阶组件形式

import React, { Component } from 'react'
class Banana extends Component {
constructor(props) {
super(props);
this.state = {
username: ''
}
}
componentWillMount() {
let username = 'wengkaimin'
this.setState({
username: username
})
}
render() {
return (
<div> {this.state.username} likes banana</div>
)
}
}
export default Banana;
import React, { Component } from 'react'
class Apple extends Component {
constructor(props) {
super(props);
this.state = {
username: ''
}
}
componentWillMount() {
let username = 'wengkaimin'
this.setState({
username: username
})
}
render() {
return (
<div> {this.state.username} likes apple</div>
)
}
}
export default Apple;

从两段代码来看有很多重复的组件代码。按照高阶函数的思想我们中间封装一个高阶组件来处理这些东西。

import React, {Component} from 'react'
export default (fruitComponent) => {
class Myfruit extends Component {
constructor() {
super();
this.state = {
username: ''
}
}
componentWillMount() {
let username = 'wengkaimin'
this.setState({
username: username
})
}
render() {
return <fruitComponent username={this.state.username}/>
}
}
return Myfruit
}

简化apple和banana组件

import React, {Component} from 'react';
import Myfruit from 'Myfruit';
class Banana extends Component {
render() {
return (
<div> {this.props.username} likes banana</div>
)
}
}
Banana = Myfruit(Banana);
export default Banana;

同理apple高阶组件把username通过props把他传给目标组件。

高阶组件
https://nollieleo.github.io/posts/高阶组件/
作者
翁先森
发布于
2020-03-16
许可协议
CC BY-NC-SA 4.0