文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

React如何使用高阶组件与Hooks实现权限拦截

2023-07-05 01:41

关注

本篇内容主要讲解“React如何使用高阶组件与Hooks实现权限拦截”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“React如何使用高阶组件与Hooks实现权限拦截”吧!

高阶组件是以组件作为参数,返回一个组件的函数。返回的组件把传进去的组件进行功能强化。通过以下示例进一步理解高阶组件。

思路

实现

注入权限列表

抽离Context

在文件中创建一个context,并使用export暴露出对应的Provider,Consumer,Context

import { createContext } from "react";const PermissionContext = createContext()export const PermissionContextProvider = PermissionContext.Providerexport const PermissionContextConsumer = PermissionContext.Consumerexport default PermissionContext
向页面注入权限列表的HOC

此处创建一个HOC,包裹了App组件,实现了向整个页面注入Permission列表

import React, { useState, useEffect } from 'react'import { PermissionContextProvider } from '../../utils/PermissionContext' // import对应的Contextfunction PermissionIndex(Component) {  return function Index(props){    const [permission, setpermission] = useState([])    useEffect(()=>{setpermission(['edituser','checkorder'])//此处实际为 获取权限列表的请求操作},[])//代替了类组件的componenetDidMount生命周期    return (      <PermissionContextProvider value={permission}>        <Component {...props}></Component>      </PermissionContextProvider>      //此处返回了注入权限列表Context的组件    )  }}export default PermissionIndex
向根组件注入权限
import React from 'react';import ReactDOM from 'react-dom';import './index.css';import App from './pages/App/App'import PermissionIndex from './components/PermissionIndex/PermissionIndex'const IndexWithPermission = PermissionIndex(App)ReactDOM.render(  <IndexWithPermission/>,  document.getElementById('root'));

含有权限拦截功能的HOC

无权限时显示的组件
import React from 'react'function NoPermission() {  return (    <div>对不起,请与管理员获取权限</div>  )}export default NoPermission
权限拦截HOC组件
import React, { useContext } from 'react'import PermissionContext from '../../utils/PermissionContext'import NoPermission from '../NoPermission/NoPermission'function PermissionHoc(authorization) {  return function(Component){    return function PermissionIndex(props){      const context = useContext(PermissionContext)      //使用useContext获取当前的权限列表,相当于类组件中的contentType静态属性      return context.indexOf(authorization) >= 0 ? <Component {...props}></Component> : <NoPermission></NoPermission>    }  }}export default PermissionHoc

测试

用于测试的组件
import React from 'react'function PermissionTest(props) {  return (    <div>PermissionTest - {props?.name}</div>  )}export default PermissionTest
在组件中使用权限组件
import React, { useContext, useEffect, useRef } from 'react'import PermissionContext from '../../utils/PermissionContext'import PermissionHoc from '../../components/PermissionHoc/PermissionHoc'import PermissionTest from '../../components/PermissionTest/PermissionTest'export default function App() {  const Edituser = PermissionHoc('edituser')(PermissionTest)  const Edituser1 = PermissionHoc('edituser1')(PermissionTest)  return (    <div>        <Edituser name="edituser"></Edituser>        <Edituser1 name="edituser1"></Edituser1>    </div>  )}

此处,通过用PermissionHOC函数处理原始组件,进行了权限拦截功能

React如何使用高阶组件与Hooks实现权限拦截

到此,相信大家对“React如何使用高阶组件与Hooks实现权限拦截”有了更深的了解,不妨来实际操作一番吧!这里是编程网网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯