浅谈 react高阶组件-参数-高阶函数

简介: 1.不废话,书接上文react-高阶组件初识,只讲了个开头2.接下来继续

1. 前言


1.不废话,书接上文react-高阶组件初识,只讲了个开头

2.接下来继续


2.参数


react-高阶组件初识中,高阶组件的参数只是一个组件,但是其实高阶组件的参数还可以接收其他参数,比如 根据传递的参数来获取 storage的数据

2.1 高阶组件代码

function withUserData(WrappedComponent,key) {
            return class extends React.Component {
                constructor(props){
                    super(props)
                    this.state= { userInfo:{} }
                }
                componentDidMount() {
                    //key传递过来的
                    let userInfo = JSON.parse(localStorage.getItem(key))
                    this.setState({ userInfo })
                }
                render() {
                    // ...this.props 传递给当前组件的属性继续向下传递
                    return <WrappedComponent userInfo={this.state.userInfo} {...this.props} />
                }
            }
        }

1.其实没有额外变化 只是根据 key来获取值

2.这里面为什么以 with开头,其实是受react-router里面的 withRouter的影响


2.2 包裹组件也没变化

class UserView2 extends React.Component {
            render() {
                let { userInfo } = this.props
                return (
                    <div>
                        <h1>{userInfo.name}</h1>
                        <p>{userInfo.description}</p>
                    </div>
                )
            }
        }


2.3 联合高阶组件的使用

const UserHOC = withUserData(UserView2,"userInfo")
        let App = () => {
            return (
                <div>
                    <h1>App</h1>
                    <UserHOC />
                </div>
            )
        }


就是多加个参数而已


3. 高阶函数


3.1 基本概念

1.高阶函数,返回值是一个高阶组件,所以也可以看成是高阶组件的变种形式


3.2 整改

既然返回值是高阶组件那就好说了

const withUserData = (key)=>(WrappedComponent)=> {
            return class extends React.Component {
                constructor(props){
                    super(props)
                    this.state= { userInfo:{} }
                }
                componentDidMount() {
                    //key传递过来的
                    let userInfo = JSON.parse(localStorage.getItem(key))
                    this.setState({ userInfo })
                }
                render() {
                    // ...this.props 传递给当前组件的属性继续向下传递
                    return <WrappedComponent userInfo={this.state.userInfo} {...this.props} />
                }
            }
        }


3.3 分析

1.高阶组件作为返回值就行

2.上面的写法和下面的写法等价,箭头函数的基础

const withUserData2 = (key)=>(WrappedComponent)=>  class extends React.Component {}


3.4  WrappedComponent

WrappedComponent 这个包裹组件没有变化


3.5 联合使用

const UserHOC = withUserData("userInfo")(UserView2)
        let App = () => {
            return (
                <div>
                    <h1>App</h1>
                    <UserHOC />
                </div>
            )
        }


1.这种写法在 react-redux里面见到的比较多

export default connect(mapStateToProps, mapDispatchToProps)

2.类似这种,其实很多第三方库都有,只是之前可能不太了解高阶组件,高阶函数给忽略掉了




相关文章
|
7月前
|
设计模式 前端开发 数据可视化
【第4期】一文了解React UI 组件库
【第4期】一文了解React UI 组件库
366 0
|
7月前
|
存储 前端开发 JavaScript
【第34期】一文学会React组件传值
【第34期】一文学会React组件传值
78 0
|
7月前
|
前端开发
【第31期】一文学会用React Hooks组件编写组件
【第31期】一文学会用React Hooks组件编写组件
81 0
|
7月前
|
资源调度 前端开发 JavaScript
React 的antd-mobile 组件库,嵌套路由
React 的antd-mobile 组件库,嵌套路由
122 0
|
3月前
|
前端开发
react学习(22)高阶函数和函数柯里化
react学习(22)高阶函数和函数柯里化
|
3月前
封装react-antd-table组件参数以及方法如rowSelection、pageNum、pageSize、分页方法等等
文章介绍了如何封装React-Antd的Table组件,包括参数和方法,如行选择(rowSelection)、页码(pageNum)、页面大小(pageSize)、分页方法等,以简化在不同表格组件中的重复代码。
70 0
|
7月前
|
设计模式 前端开发 API
React的高阶组件(HOC):使用与设计模式探讨
【4月更文挑战第25天】React的高阶组件(HOC)是一种复用和增强组件的高级模式,它接受组件并返回新组件。非侵入式增强使得HOC能在不修改原有组件代码的情况下添加功能。定义HOC后,将其应用于目标组件并渲染增强后的组件。常见设计模式包括属性代理、控制反转和装饰器。然而,使用时要注意避免滥用,保持命名清晰,关注性能优化。理解并恰当使用HOC能提升React应用的构建效率。
|
7月前
|
存储 前端开发 中间件
React组件间的通信
React组件间的通信
52 1
|
7月前
|
前端开发
react高阶成分(HOC)
react高阶成分(HOC)
47 1
|
7月前
|
前端开发 JavaScript API
React组件生命周期
React组件生命周期
121 1