react之按钮鉴权

使用HOC来完成

HOC:高阶组件,是React中复用组件逻辑的一种高级技巧。HOC自身不是React API的一部分,他是一种基于React的组合特性而形成的设计模式。

作用:用于复用组件的业务逻辑

 VUE mixin
 React Hoc

用户数据渲染带操作按钮渲染

使用HOC完成按钮鉴权

Hoc的写法:

高阶组件是参数为组件,返回值为新组件的函数

function buttonHoc(wrapComponent){
    return 函数组件
}

function buttonHoc(wrapComponent){
    return 类组件
}

创建button HOC组件

export default (wrapComponent)=>{
    return ()=>{
        return(
            <>
            <div>HOC组件</div>
            </>
        )
    }
}

高阶组件给普通组件使用

1️⃣:  首先引入高阶组件

2️⃣:使用高阶组件,将组件作为参数传递到高阶组件

import ButtonHoc from "./ButtonHoc"
let Button =  (props)=>{
    let {label} = props
    return (
        <>
        <button>{label}</button>
        </>
    )
}
// 使用高阶组件
export default ButtonHoc(Button)

❗:其中ButtonHoc就是高阶组件,Button是函数组件

3️⃣:在HOC组件中输出包裹组件

export default (WrapComponent)=>{
    return ()=>{
        return(
            <>
            <WrapComponent></WrapComponent>
            </>
        )
    }
}

❗:高阶组件参数首字母大写,Hoc组件若没有向下传递props,页面会发生效果异常,即使在组件Button中收到了props,但是组件button被高阶组件所包裹,而高阶组件并且没有将props进行向下的传递

4️⃣:使用扩展符号,将props进行扩展并且延申 

按钮权限:

当前用户登录,开发服务器返回当前用户的权限

import { useState } from "react"

export default (WrapComponent)=>{
    return (props)=>{
        // 返回当前权限
        let {permission} = props
        // 控制组件是否渲染
        let [] = useState(false)
        // 模拟用户权限数据
        let [perm,setPer] = useState(["admin:user:delete","admin:user:update"])
        // 如果是全部权限,直接渲染
        let Index = null
        if(perm[0] == "*:*:*") Index = 0
        else  Index = perm.indexOf(permission)
        return(
            <>
            {/* ...是扩展props自定义组件属性传值 延申 */}
            {Index!=-1?<WrapComponent {...props}></WrapComponent>:null}
            </>
        )
    }
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/16523.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Shell快速入门笔记

文章目录 Shell 快速入门笔记1、Shell概述2、Shell初体验4、注释5、变量6、数据类型6.1 字符串6.2 数组 7、参数传递8、运算符9、常用命令9.1 echo命令9.2 printf命令9.3 test命令 10、流程控制10.1 条件判断10.2 循环 11、函数12、输入/输出重定向12.0 前置知识12.1 输出重定向…

IPsec中IKE与ISAKMP过程分析(主模式-消息3)

IPsec中IKE与ISAKMP过程分析&#xff08;主模式-消息1&#xff09;_搞搞搞高傲的博客-CSDN博客 IPsec中IKE与ISAKMP过程分析&#xff08;主模式-消息2&#xff09;_搞搞搞高傲的博客-CSDN博客 阶段目标过程消息IKE第一阶段建立一个ISAKMP SA实现通信双发的身份鉴别和密钥交换&…

一文详细介绍查看和启用nginx日志(access.log和error.log),nginx错误日志的安全级别,自定义访问日志中的格式

文章目录 1. 文章引言2. Nginx访问日志(access.log)2.1 简述访问日志2.2 启用Nginx访问日志2.3 自定义访问日志中的格式 3. Nginx错误日志(error.log)3.1 简述错误日志3.2 启用错误日志3.3 Nginx错误日志的安全级别 4. 文末总结 1. 文章引言 我们在实际工作中&#xff0c;经常使…

数字设计小思 - D触发器与死缠烂打的亚稳态

前言 本系列整理数字系统设计的相关知识体系架构&#xff0c;为了方便后续自己查阅与求职准备。在FPGA和ASIC设计中&#xff0c;D触发器是最常用的器件&#xff0c;也可以说是时序逻辑的核心&#xff0c;本文根据个人的思考历程结合相关书籍内容和网上文章&#xff0c;聊一聊D…

函数-函数递归及练习

目录 1、什么是递归&#xff1f; 2、递归的两个必要条件 3、递归的练习 3.1 接受一个整型值&#xff08;无符号&#xff09;&#xff0c;按照顺序打印它的每一位 3.2 编写函数不允许创建临时变量&#xff0c;求字符串的长度 3.3 求第n个斐波那契数 3.4 字符串逆序&…

Go语言-数据结构与算法

go语言之专业数据结构与算法 20.4 稀疏 sparsearray 数组 20.4.1 先看一个实际的需求  编写的五子棋程序中&#xff0c;有存盘退出和续上盘的功能 稀疏数组的处理方法是 : 1) 记录数组一共有几行几列&#xff0c;有多少个不同的值 2) 思想&#xff1a;把具有不同值…

【五一创作】【Midjourney】Midjourney 连续性人物创作 ② ( 获取大图和 Seed 随机种子 | 通过 seed 随机种子生成类似图像 )

文章目录 一、获取大图和 Seed 随机种子二、通过 seed 种子生成类似图像 一、获取大图和 Seed 随机种子 注意 : 一定是使用 U 按钮 , 在生成的大图的基础上 , 添加 信封 表情 , 才能获取该大图的 Seed 种子编码 ; 在上一篇博客生成图像的基础上 , 点击 U3 获取第三张图的大图 ;…

STL常用梳理——VECTOR常用接口及其迭代器实现

Vector篇 Vector介绍Vector实现1、定义默认构造函数使用实现 2、迭代器Iterator迭代器使用 3、空间增长问题使用实现 迭代器迭代器介绍迭代器实现 Vector介绍 vector是STL中容器之一&#xff0c;特性如下&#xff1a; vector是表示可变大小数组的序列容器。就像数组一样&#…

Python基础合集 练习21 (错误与异常处理语句)

‘’‘try: block1 except[ExceptionName]: block2 ‘’’ block1:执行代码,表示可能会出现错误的代码块 ExceptionName: 表示要捕获的异常名称,为可选参数.如果不指定异常名称,则表示捕获所有异常 block2:表示发生异常时执行的代码块 while True: try: num int(input(请输…

设计模式——工厂模式

导航&#xff1a; 【黑马Java笔记踩坑汇总】JavaSEJavaWebSSMSpringBoot瑞吉外卖SpringCloud黑马旅游谷粒商城学成在线设计模式牛客面试题 目录 1、工厂模式介绍 2、披萨项目需求 3、传统方式 4、非静态简单工厂模式 5、静态简单工厂模式 6、工厂方法模式 7、抽象工厂模…

spass modeler

课时1&#xff1a;SPSS Modeler 简介 本课时一共分为五个模块&#xff0c;分别是Modeler概述、工具安装、窗口说明以及功能介绍和应用案例。相信通过本课时内容的学习&#xff0c;大家将会对SPSS Modeler有个基础的了解. 在学习本节课内容之前&#xff0c;先来看看本节课我们究…

目标检测模型量化---用POT工具实现YOLOv5模型INT8量化

POT工具是什么 POT工具&#xff0c;全称&#xff1a;Post-training Optimization Tool&#xff0c;即训练后优化工具&#xff0c;主要功能是将YOLOv5 OpenVINO™ FP32 模型进行 INT8 量化&#xff0c;实现模型文件压缩&#xff0c;从而进一步提高模型推理性能。 不同于 Quantiz…

MYSQL-数据库管理(上)

一、数据库概述 一、数据库基本概念 1.1 数据 1&#xff09; 描述事物的符号记录称为数据&#xff08;Data&#xff09;。数字、文字、图形、图像、声音、档案记录等 都是数据。 2&#xff09;数据是以“记录”的形式按照统一的格式进行存储的&#xff0c;而不是杂乱无章的。…

Mask2Former来了!用于通用图像分割的 Masked-attention Mask Transformer

原理https://blog.csdn.net/bikahuli/article/details/121991697 源码解析 论文地址&#xff1a;http://arxiv.org/abs/2112.01527 项目地址&#xff1a;https://bowenc0221.github.io/mask2former Mask2Former的整体架构由三个组件组成&#xff1a; 主干特征提取器&#xff…

【Java笔试强训 29】

&#x1f389;&#x1f389;&#x1f389;点进来你就是我的人了博主主页&#xff1a;&#x1f648;&#x1f648;&#x1f648;戳一戳,欢迎大佬指点! 欢迎志同道合的朋友一起加油喔&#x1f93a;&#x1f93a;&#x1f93a; 目录 一、选择题 二、编程题 &#x1f525;求正数数…

UNIX环境高级编程——进程关系

9.1 引言 本章详细说明进程组以及会话的概念&#xff0c;还将介绍登录shell&#xff08;登录时所调用的&#xff09;和所有从登录shell启动的进程之间的关系。 9.2 终端登录 9.3 网络登录 9.4 进程组 每个进程除了有一进程ID之外&#xff0c;还属于一个进程组&#xff0c;进…

chatgpt 数据相关应用论文策略简介

hatGPT等预训练大模型&#xff0c;一个核心能力就是经过海量语料的训练加上强化学习的引导&#xff0c;其具有强大的接近人类的文本生成能力。这个能力的一大用途&#xff0c;就是可以为我们生产数据或者标注数据&#xff0c;再基于这些数据训练我们自己的模型。 On the Feasi…

如何让ChatGPT成为科研工作中的小助手?(附使用指南)

大家好&#xff0c;我是带我去滑雪&#xff01; 从2022年年底发布叫ChatGPT的人工智能聊天机器人以来&#xff0c;逐渐强势进入了各行各业&#xff0c;一夜火爆全网&#xff0c;它使用自然语言处理技术来与用户进行交互和沟通&#xff0c;可以回答用户关于知识、娱乐、生活等方…

【计算机专业漫谈】【计算机系统基础学习笔记】W1-计算机系统概述

利用空档期时间学习一下计算机系统基础&#xff0c;以前对这些知识只停留在应试层面&#xff0c;今天终于能详细理解一下了。参考课程为南京大学袁春风老师的计算机系统基础MOOC&#xff0c;参考书籍也是袁老师的教材&#xff0c;这是我的听课自查资料整理后的笔记&#xff0c;…

上市公司碳排放测算数据(1992-2022年)

根据《温室气体核算体系》&#xff0c;企业的碳排放可以分为三个范围。 范围一是直接温室气体排放&#xff0c;产生于企业拥有或控制的排放源&#xff0c;例如企业拥有或控制的锅炉、熔炉、车辆等产生的燃烧排放&#xff1b;拥有或控制的工艺设备进行化工生产所产生的排放。 范…