react高阶组件

什么是高阶组件
高阶组件就是一个函数,传给它一个组件,它返回一个新的组件。

const NewComponent = higherOrderComponent(OldComponent)
  • 高阶组件并不是一个什么组件,而是一个函数,它接受一个组件作为参数,返回一个新的组件。这个新的组件会使用你传给它的组件作为子组件,这样就方便在组件中传值,如下是一个简单的高阶组件示例:
import React, { Component } from 'react'
export default (OldComponent) => {
  class NewComponent extends Component {
    render () {
      return 
    }
  }
  return NewComponent
}
  • 这个高阶组件好像什么都没有做,只是简单地传入一个组件,然后新建一个NewComponent组件类来渲染传入的组件。要想体现出高阶组件的功能,我们先给它出入一些数据:
import React, { Component } from 'react'

export default (OldComponent, name) => {
  class NewComponent extends Component {
    constructor () {
      super()
      this.state = { 
        data: null,
      }
    }
    componentWillMount () {
      const data = sessionStorage.getItem(name);
      this.setState({ data });
    }
    render () {
      return 
    }
  }
  return NewComponent
}
  • 现在 NewComponent 会根据第二个参数 name 在挂载阶段从 SessionStorage 加载数据,并且修改state.data,而渲染的时候将 state.data 通过 props.data 传给 OldComponent。
  • 这样给高阶组件赋予了一定的功能,但是要如何使用这个高阶组件呢?
    假设这个文件在component/sessionLoadData.js,我们在其他地方使用这个高阶组件:
import sessionLoadData from './component/sessionLoadData.js'

class InputWithUserName extends Component {
  render () {
    return 
用户名:
} } InputWithUserName = sessionLoadData(InputWithUserName, 'username'); export default InputWithUserName

总结

  • 高阶组件就是一个函数,传给它一个组件,它返回一个新的组件。新的组件使用传入的组件作为子组件。
  • 高阶组件的作用是用于代码复用,可以把组件之间可复用的代码、逻辑抽离到高阶组件当中。新的组件和传入的组件通过 props 传递信息。
  • 高阶组件有助于提高我们代码的灵活性,逻辑的复用性。

你可能感兴趣的:(react高阶组件)