zoukankan      html  css  js  c++  java
  • react-高阶组件

    1、高阶组件就是一个函数,传给它参数(包括组件,变量等),它返回一个新的组件

    2、列如现在有这么个高阶组件,根据传入的参数name,从而从localstore中获得这个name的值,然后更新到传入的参数component(组件)中去

    wrapWithLoadData.js文件的代码:

    import Rect ,{component} from "react"

    export default (WrappedComponent,name)=>{       (WrappedComponent为传进来的组件,name为传进来的参数)

           class NewComnent extends Component {  //定一个组件来为传进来的组件进行数据处理

                    constructor(){

                             super()

                             this.state={data:null}

                    }

                   componentWillMount(){

                          let data = localStorage.getItem(name)

                          this.setState({ data })

                  }

                 render () {

                     return <WrappedComponent data={this.state.data} />//高阶组件内部的包装组件和被包装组件之间通过 props 传递数据。

                }

            }

            return NewComponent    //返回经过数据处理的组件(其实就是作为参数传进来的组件)

    }

    这就是一个高阶组件,当某个组件要从localstore中获值时,就可以将这个组件作为参数传进来。

    2、列:有一个组件InputWithUserName要用到上面的高阶组件(即从localstore中获取数据)

    import wrapWithLoadData from './wrapWithLoadData'  //获得高阶组件

    class InputWithUserName extends Component {

             render () {

                       return <input value={this.props.data} />//高阶组件内部的包装组件和被包装组件之间通过 props 传递数据。

               }

    }

    InputWithUserName=wrapWithLoadData (InputWithUserName ,“username”)//将组件InputWithUserName作为参数传入高阶组件,到高阶组件中经过处理数据后再将其返回 

    export default InputWithUserName

    3、如何用这个InputWithUserName组件

    import InputWithUserName from './InputWithUserName'

    class Index extends Component {

             render () {

                       return ( <div> 用户名:<InputWithUserName /> </div> )

              }

    }

    别人用这个组件InputWithUserName的时候实际是用了被加工过的组件。

    如果现在我们需要另外一个文本输入框组件,它也需要 LocalStorage 加载'content' 字段的数据。我们只需要定义一个新的 TextareaWithContent

    import wrapWithLoadData from './wrapWithLoadData'
    
    class TextareaWithContent extends Component {
      render () {
        return <textarea value={this.props.data} />
      }
    }
    
    TextareaWithContent = wrapWithLoadData(TextareaWithContent, 'content')
    export default TextareaWithContent

    只用于自己学习记录

  • 相关阅读:
    left join问题
    SQL索引
    数据库查询优化
    define and inline
    程序的内存分配
    __closure
    this指针
    java笔记
    Visual Studio Code(VSCODE)语言设置
    Excel 2010如何打开多个独立窗口?
  • 原文地址:https://www.cnblogs.com/yszblog/p/8611135.html
Copyright © 2011-2022 走看看