react高阶组件

作者: 华戈的小书 | 来源:发表于2019-06-04 17:45 被阅读7次

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

    const NewComponent = higherOrderComponent(OldComponent)
    
    • 高阶组件并不是一个什么组件,而是一个函数,它接受一个组件作为参数,返回一个新的组件。这个新的组件会使用你传给它的组件作为子组件,这样就方便在组件中传值,如下是一个简单的高阶组件示例:
    import React, { Component } from 'react'
    export default (OldComponent) => {
      class NewComponent extends Component {
        render () {
          return <OldComponent />
        }
      }
      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 <OlComponent data={this.state.data} />
        }
      }
      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 <div>用户名:<input name="username" value={this.props.data} /></div>
      }
    }
    InputWithUserName = sessionLoadData(InputWithUserName, 'username');
    export default InputWithUserName
    

    总结

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

    相关文章

      网友评论

        本文标题:react高阶组件

        本文链接:https://www.haomeiwen.com/subject/krakxctx.html