当前位置: 首页 > article >正文

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}
            </>
        )
    }
}


http://www.kler.cn/a/16590.html

相关文章:

  • 股市下跌时,期权市场的应对策略有哪些?
  • Rust 中的 match 基本用法
  • SpringBoot(十三)SpringBoot配置webSocket
  • Java static静态变量 C语言文件读写
  • 解耦与模块化:鸿蒙平台上的服务注册与查找机制
  • 【ARM】MDK-烧录配置文件无权限访问
  • Java微服务商城高并发秒杀项目--013.SentinelResource的使用
  • 算法刷题|392.判断子序列、115.不同的子序列
  • 大型医院影像PACS系统三维重建技术(获取数据、预处理、配准、重建和可视化)
  • Stable Diffusion 本地部署教程不完全指南
  • 第18章 项目风险管理
  • javascript中的严格模式
  • 自动驾驶行业观察之2023上海车展-----车企发展趋势(1)
  • Python基础合集 练习19(类与对象3(多态))
  • Chapter4:频率响应法(上)
  • Linux套接字编程-2
  • Packet Tracer - 静态路由故障排除
  • 如何学习python?
  • 【C++】右值引用完美转发
  • 什么是 Docker?它能用来做什么?
  • ChatGPT常见问题及其解决方法汇总
  • 微软正式宣布 Win10 死刑,Win11 LTSC要来了
  • 使用 ESP32 设计智能手表 – 第 1 部分制作表盘
  • Shell编程之循环语句
  • osg操控器之动画路径操控器osgGA::AnimationPathManipulator分析
  • 代码随想录算法训练营第四十五天|70. 爬楼梯 (进阶)、322. 零钱兑换、279.完全平方数