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把他传给目标组件。