基于react的高阶函数的使用方法
1.HOC -- 高阶组件Hign order component
从函数式编程过来的一个概念,它源于HOF high order function 高阶函数
HOF高阶函数: - -就是一个函数接收一个算子函数,然后返回一个算子函数
HOC高阶组件 -- 就是一个函数接收一个组件,然后返回一个组件
就是一个函数接收一个组件;
定义一个高阶组件,需要先定义一个函数,在这个函数中返回一个组件
import React,{Component} from 'react' function layout(cb){ //function cb(it){ // return {myKey:it.key,myName:it.name} //} return function(Child){ class Layout extends Component{ state ={ menuList:[ {key:'IndexBar',name:'索引栏'}, {key:'NavBar',name:'导航栏'}, {key:'Pagination',name:'分页'}, ], nowMenu:{key:'',name:''} } render(){ return( <div><header><h2>这是头部内容</h2></header></div> <div><aside><ul>{this.state.menuList.map(it=>{ return( <li onClick={()=>{ //不能赋值为it对象,因为对象时引用数据类型 //this.setState({nowMenu:it}) //需要对数据进行深拷贝,但是it只有一层,浅拷贝和深拷贝是一个意思 //this.setState({nowMenu:{mykey:it.key,myName:it.name}}) //通过一个函数得到返回的对象 this.setState({nowMenu:cb(it)}) }}key={it.key}>{it.name}</li> ) })} </ul> </aside> <main> {/* 在这里可以接收一个组件,如果是Vue就很简单,默认插槽即可*/} {/* 为什么要在子组件的属性进行参数传递,因为react只有state和props数据发生变化才会触发组件更新 */} {/* 因为数据在layout高阶组件中,那么要想触发Child组件更新只有props数据 */} {/* <Child myKey={this.state.nowMenu.key} myName={this.state.nowMenu.name}/>*/} {/* 动态绑值*/} <Child {...this.state.nowMenu} /> </main> </div> </div> ) } } return Layout } } export default layout
import React,{Component} from 'react' import layout from './layout' class App extends Component{ render(){ console.log(this.props) return( <div><h2>这是主要内容</h2> <p>当前菜单:{this.props.zsKey} - - {this.props.zsName}</p> </div> ) } } //传递一个函数进去 function cb(it){ return {zsKey:it.key,zsName:it.name} } let NewComponent = layout(cb)(App) export default NewComponent //这个高阶组件连接成为了子组件传入到高阶组件然后导出成为新的组件
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?