首页 > 其他分享 >【React】高阶函数运用(附代码)

【React】高阶函数运用(附代码)

时间:2024-10-22 17:47:34浏览次数:7  
标签:const 对话框 代码 React 组件 import 高阶 dialogHOC

在 React 中,使用高阶组件(Higher-Order Component, HOC)是一种常见的设计模式,用于增强组件的功能。那么在实际中我们会在何时用到呢?我们设计组件的目标是为了极大的解决业务使用问题,使用便利性和可扩展性则是我们设计组件的最大目标!

比如一个简单的场景,需要我们开发一个对话框,该对话框是复用性很高的组件,我们可以在这个组件中去定义对话框提交表单,关闭显示的逻辑。

dialogHOC 可能是一个用来处理对话框(Dialog/Modal)相关逻辑的高阶组件。以下是如何使用 dialogHOC 的基本示例。

1. 创建一个 HOC

首先,我们可以假设 dialogHOC 是一个用于增强组件的高阶组件,它可能会提供打开和关闭对话框的功能。

下面是一个简单的 HOC 示例:

// dialogHOC.js
import React, { useState } from 'react';

const dialogHOC = (WrappedComponent) => {
    return (props) => {
        const [isOpen, setIsOpen] = useState(false);

        const openDialog = () => setIsOpen(true);
        const closeDialog = () => setIsOpen(false);

        return (
            <>
                <WrappedComponent {...props} openDialog={openDialog} />
                {isOpen && (
                    <div className="dialog">
                        <h2>Dialog Title</h2>
                        <p>Some content here...</p>
                        <button onClick={closeDialog}>Close</button>
                    </div>
                )}
            </>
        );
    };
};

export default dialogHOC;

2. 使用 HOC 装饰组件

然后,你可以使用这个 HOC 来增强一个组件,比如一个按钮:

// MyButton.js
import React from 'react';
import dialogHOC from 'components/dialogHoc';

const MyButton = ({ openDialog }) => {
    return <button onClick={openDialog}>Open Dialog</button>;
};

export default dialogHOC(MyButton);

3. 渲染这个组件

最后,渲染这个被增强的组件:

import React from 'react';
import ReactDOM from 'react-dom';
import MyButton from './MyButton';

const App = () => {
    return (
        <div>
            <h1>My App</h1>
            <MyButton />
        </div>
    );
};

ReactDOM.render(<App />, document.getElementById('root'));

上面的实现只是一个简单的案例,在工作中可能需求更加明确和具体,可以根据需要添加自己的属性方法去实现具体功能。

我们看到上面的代码在用高阶函数时,以函数为参数,实际上,在日常开发中我们经常用到装饰器去简化代码,具体使用为

import React from 'react';
import dialogHOC from 'components/dialogHoc';

@dialogHOC
class MyComponent extends React.Component {
    render() {
        return (
            <button onClick={this.props.openDialog}>Open Dialog</button>
        );
    }
}

export default MyComponent;

标签:const,对话框,代码,React,组件,import,高阶,dialogHOC
From: https://blog.csdn.net/nemoiu/article/details/143164581

相关文章

  • 哪种IDE能同时写java和前端代码
    在选择IDE(集成开发环境)来同时编写Java和前端代码时,几个主要的选择包括IntelliJIDEA、Eclipse、和VisualStudioCode。IntelliJIDEA提供了强大的Java开发支持和广泛的前端开发插件,Eclipse以其插件生态系统著称,可以通过安装相应的插件支持Java和前端开发,而VisualStudioCode是......
  • 代码随想录算法训练营Day42 | 完全背包理论基础、518.零钱兑换II、377. 组合总和 Ⅳ、
    目录完全背包理论基础518.零钱兑换II377.组合总和Ⅳ卡玛网57.爬楼梯(进阶版)完全背包理论基础题目52.携带研究材料(第七期模拟笔试)题目描述:小明是一位科学家,他需要参加一场重要的国际科学大会,以展示自己的最新研究成果。他需要带一些研究材料,但是他的行李箱空间......
  • Unity Shader深度图的应用,手把手教你写出可以正确计算并且渲染出二次元角色边缘光的着
    梦开始的地方相信大家看番的时候,都注意到了,很多时候,在角色周围有一圈光晕旧版《魔术快斗》剧照《新蔷薇少女》剧照 我们将这种光晕,称之为边缘光边缘光是描边的一种,动画师之所以加入边缘光,是为了凸现角色轮廓,使得角色区别于背景不少游戏也有着这种边缘光游戏《鸣潮》......
  • MCP4921DAC芯片硬件设计及驱动代码(PIC单片机硬件SPI模式)
    MCP4921DAC芯片硬件设计及驱动代码(PIC单片机硬件SPI模式)MCP4921简介MCP4921是一款由MicrochipTechnology生产的单通道、12位数模转换器(DAC),具有外部电压参考引脚和SPI接口。它具有以下主要特点:12位分辨率:提供高精度的模拟输出。单通道电压输出:适用于需要单一......
  • jmeter参数化代码实现
    jmeter参数化代码实现csv组件参数化很方便,单机压测时喜欢使用,但分布式传递可能需要多次上传参数化文件,假设参数化数据不多,可以直接写道内存里,以ip举例:预处理JSR233-groovy,代码记录如下:步骤1:初始化IP列表if(props.get("ipList")==null){String[]ipList=["192.168......
  • Qwik-能帮你移出项目中99%的JS代码
    本文分享自天翼云开发者社区《Qwik-能帮你移出项目中99%的JS代码》,作者:尹****勇什么是QwikQwik是一款全栈SSR框架,它号称 -能帮你移出项目中99%的JS代码-FCPFCP(FirstContentPaint首次内容绘制)测量 页面从开始加载到页面内容的任何部分在屏幕上完成渲染的时间现在基本......
  • 高等数学 7.6高阶线性微分方程
    目录一、线性微分方程的解的结构*二、常数变易法方程\[\cfrac{\mathrm{d}^2y}{\mathrm{d}x^2}+P(x)\cfrac{\mathrm{d}y}{\mathrm{d}x}+Q(x)=f(x)\tag{1}\]叫做二阶线性微分方程。当方程右端\(f(x)\equiv0\)时,方程叫做齐次的;当\(f(x)\not\equiv0\)时,方程叫做非......
  • 常见的场景题(读代码)
    以下代码的输出?(函数修改形参能否影响实参?)函数是赋值传递。num和obj的值是不会被改变的。所以输出的num还是100,obj仍然是{name:'双越'}。手写convert函数,将数组转为树(TS写的)基础问题!不会的话先去恶补JS版本的数据结构!树节点:如何找到parentNode?快速找到我先跳过这......
  • Taro 鸿蒙技术内幕系列(一):如何将 React 代码跑在 ArkUI 上
    作者:京东零售朱鸣辉   基于Taro打造的京东鸿蒙APP已跟随鸿蒙Next系统公测,本系列文章将深入解析Taro如何实现使用React开发高性能鸿蒙应用的技术内幕背景随着鸿蒙操作系统的快速发展,开发者们期待将现有跨平台应用迁移到鸿蒙平台。Taro作为一个流行的跨平台开......
  • 【代码】约瑟夫问题——c++解决代码
    哈喽大家好!我是@学霸小羊,上次讲了讲约瑟夫问题的背景,今天来讲讲怎样用代码实现。(还没了解背景小伙伴的可以先去下面的网址学习一下)【代码】约瑟夫问题——故事背景https://blog.csdn.net/yangyanbin_sam/article/details/143152232?spm=1001.2014.3001.5501首先,我们要将这个......