• 深入浅出:react高阶成分(HOC)的应用


    React中的HOC(Higher-Order Component)是一种高阶组件的模式,它是一个函数,接收一个组件作为参数,并返回一个新的包装组件。HOC可以用于增强组件的功能,例如添加属性、处理生命周期方法、共享状态等。

    HOC的基本用法如下:

    1. const withEnhancement = (WrappedComponent) => {
    2. // 定义新的组件
    3. class EnhancedComponent extends React.Component {
    4. // ...添加额外逻辑
    5. render() {
    6. // 渲染原始组件,并传递props
    7. return <WrappedComponent {...this.props} />;
    8. }
    9. }
    10. // 返回新组件
    11. return EnhancedComponent;
    12. };
    13. // 使用HOC增强组件
    14. const EnhancedComponent = withEnhancement(MyComponent);

     上面这个例子有可能不太懂,没问题上第二个例子:

    1. import React, { useState, useEffect } from 'react';
    2. // 定义一个高阶组件,它接受一个组件作为输入,并返回一个新的包装组件
    3. const withAuthentication = (WrappedComponent) => {
    4. return function WithAuthentication(props) {
    5. const [isAuthenticated, setIsAuthenticated] = useState(false);
    6. // 模拟身份验证过程,实际情况可能需要异步请求服务器验证
    7. useEffect(() => {
    8. // 假设用户已登录
    9. setIsAuthenticated(true);
    10. }, []);
    11. // 根据身份验证状态渲染不同的内容
    12. if (isAuthenticated) {
    13. return <WrappedComponent {...props} />;
    14. } else {
    15. return <p>请先登录</p>;
    16. }
    17. };
    18. };
    19. // 创建一个普通的函数式组件
    20. function MyComponent() {
    21. return <div>这是需要身份验证的组件</div>;
    22. }
    23. // 使用高阶组件包装MyComponent以添加身份验证功能
    24. const AuthenticatedComponent = withAuthentication(MyComponent);
    25. // 在应用中使用包装后的组件
    26. function App() {
    27. return (
    28. <div>
    29. <h1>我的应用</h1>
    30. <AuthenticatedComponent />
    31. </div>
    32. );
    33. }
    34. export default App;

    在这个示例中,withAuthentication 是一个高阶组件,它接受一个函数式组件 WrappedComponent 作为参数,并返回一个新的函数式组件 WithAuthentication。在 WithAuthentication 组件内部,我们使用了 useState 和 useEffect 钩子来模拟身份验证过程,并根据身份验证状态渲染不同的内容。

    最后,我们在应用中使用了 AuthenticatedComponent,它是通过高阶组件 withAuthentication 包装过的 MyComponent,从而添加了身份验证功能。

    这是一个适用于React函数式组件的高阶组件示例,可以帮助你在函数式组件中实现类似的功能封装和复用。

    最后如果帮到大家的话,麻烦点一个赞,让更多人学会!

  • 相关阅读:
    基于MATLAB的一级倒立摆控制仿真,带GUI界面操作显示倒立摆动画,控制器控制输出
    本地CPU搭建知识库大模型来体验学习Prompt Engineering/RAG/Agent/Text2sql
    [SystemC]SystemC Hierarchical Channels
    【SIFT】超详详详解 - 实现细节记录
    【无标题】
    Docker的网络模式 (4+1)
    【openwrt学习笔记】新patch的制作和旧patch的修改
    Python第一阶段-第十章-Python基础综合案例-数据可视化
    判断一个日期是这一年的第几天
    dpdk/spdk/网络协议栈/存储/网关开发/网络安全/虚拟化/ 0vS/TRex/dpvs技术专家成长体系教程
  • 原文地址:https://blog.csdn.net/m0_72196169/article/details/133716617