React的高阶组件(HOC)的构建与应用

高阶组件(HOC)是React中用于组件逻辑复用的高级技术,它是一个接收组件并返回新组件的纯函数。本文介绍了如何创建和使用高阶组件,包括在组件下方添加版权信息的例子。同时,讨论了使用高阶组件时应注意的事项,如避免在render函数内使用,复制静态方法,处理Refs和避免修改原型属性。此外,还强调了最佳实践,如传递不相关props和最大化利用组合。
摘要由CSDN通过智能技术生成

高阶组件

高阶组件(HOC)是react中对组件逻辑进行重用的高级技术。但高阶组件本身并不是React
API。它只是一种模式,这种模式是由react自身的组合性质必然产生的。


具体而言,高阶组件就是一个函数,且该函数接受一个组件作为参数,并返回一个新的组件,高阶组件会对传入的组件做一些通用的处理。比如:我们希望给组件的的下方增加一个版权信息,那么就可以使用高阶组件。把原始组件传入,然后,给组件增加一个版权信息后,再返回。


高阶组件是通过将原组件 包裹(wrapping) 在容器组件(container
component)里面的方式来组合(composes) 使用原组件。高阶组件就是一个没有副作用的纯函数。

// 带上版权的高阶函数
function withCopyRight(OldCom){
    
    class NewCom extends React.Component{      
        render() {
            return (
               <div>
                    <OldCom />
                    <hr/>
                    <div>
                        Copyright © 2020 Sohu All Rights Reserved. 搜狐公司 版权所有
                    </div>
               </div>
            );
        }
    }   
    
    return NewCom;
}

//原始组件
class CommentList extends React.Component {
  render() {      
    return (
        <div>
            新闻11111111111111111111
        </div>
    );
  }
}

//调用高阶函数后的组件
const CommentListWithCopyRight = withCopyRight(CommentList);

ReactDOM.render( <div> <CommentListWithCopyRight /></div> ,$("box"));
function $(id){
    return document.getElementById(id);
}
  • 高阶组件的注意点:

    1、不要在render函数里使用高阶组件
    
    2、必须将静态(static)方法做拷贝
    
    ​       
    当使用高阶组件包装组件,原始组件被容器组件包裹,也就意味着新组件会丢失原始组件的所有静态方法,解决这个问题的方法就是,将原始组件的所有静态方法全部拷贝给新组件。
    
    3、Refs不能传递
    
    一般来说,高阶组件可以传递所有的props属性给包裹的组件,但是不能传递refs引用。
    
    4、不要在高阶组件内部修改(或以其它方式修改)原组件的原型属性(prototype)。
    
    5、约定:将不相关的props属性传递给包裹组件
    
    6、约定:最大化使用组合
    
    7、约定:包装显示名字以便于调试
    
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
React 中,高阶组件(Higher-Order Component,HOC)是一种函数,接收一个组件作为参数,并返回一个新的组件。HOC 可以用于复用组件逻辑、增强组件功能或包装组件。 以下是一个简单的例子来说明如何创建一个 HOC: ```javascript import React from 'react'; // HOC 接收一个组件作为参数,并返回一个新的增强组件 const withLogger = (WrappedComponent) => { return class extends React.Component { componentDidMount() { console.log('Component is mounted'); } render() { // 返回被包装的组件,并传递所有的 props return <WrappedComponent {...this.props} />; } }; }; // 被包装的组件 const MyComponent = (props) => { return <div>{props.message}</div>; }; // 使用 HOC 包装组件 const EnhancedComponent = withLogger(MyComponent); // 在应用中使用增强后的组件 const App = () => { return <EnhancedComponent message="Hello, World!" />; }; ``` 在上面的例子中,`withLogger` 是一个 HOC,它接收一个组件作为参数,并返回一个新的增强组件。在返回的增强组件中,我们可以添加一些额外的逻辑或功能。在这个例子中,我们在增强组件的 `componentDidMount` 生命周期方法中打印一条日志。 然后,我们创建了一个被包装的组件 `MyComponent`,它接收一个 `message` 属性并进行渲染。 最后,我们使用 `withLogger` HOC 包装了 `MyComponent` 组件,将增强后的组件 `EnhancedComponent` 作为应用的一个子组件进行渲染。 这只是 HOC 的一个简单示例,你可以根据需要创建更复杂的 HOC 来增强组件的功能。HOC 可以帮助我们实现代码的复用和逻辑的封装。但是在使用 HOC 时,也要注意遵循一些最佳实践,例如避免命名冲突、正确传递 props 等。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值