当前位置:首页 > 日记 > 正文

react高阶组件经典应用之权限控制详解

react高阶组件经典应用之权限控制详解

前言

所谓高级组件,即:接受一个组件作为参数,并且其返回值也为一个react组件

而大家应该都知道,权限控制算是软件项目中的常用功能了。在网站中,权限控制一般分为两个维度:页面级别和页面元素级别。

我们来说说页面元素粒度的权限控制。在某个页面中,有个“创建用户”的按钮,管理员才能看到。

一般想到的做法类似这样

class Page extends Component{ render() { let hasCreatePermission = tool.getAuth("createUser");  return (  <div>  {hasCreatePermission ? <Button>创建用户</Button> : null}  </div> ); }}

在当前用户的权限列表中判断是否有“创建用户”的权限,然后控制按钮的显示和隐藏。

有一天,产品经理说,“没有权限的话,按钮就置灰”。

于是代码改成了这样:

 render() { let hasCreatePermission = tool.getAuth("createUser");  return (  <div>  {hasCreatePermission ? <Button>创建用户</Button> : <Button disabled={true}>创建用户</Button>}  </div> ); }

过了一个月,产品经理又说,“没有权限的话,按钮也正常展示,只是点击后给个'申请权限'的文案提示”。

额,硬着头皮改了下代码:

 render() { let hasCreatePermission = tool.getAuth("createUser");  return (  <div>  {hasCreatePermission ? <Button>创建用户</Button> : <Button onClick={()=>alert("权限不足,请找管理员小K申请")}>创建用户</Button>}  </div> ); }

如果网站中只有几个权限控制的按钮还好,想象一下,如果有50+这样的按钮,内心是不是想砍需求方?

需求方是不敢砍的。那么有没有一种方法,可以统一控制无权限时候的表现呢?

有。让我们来试试React的高阶组件吧。

export let wrapAuth = ComposedComponent =>class WrapComponent extends Component { // 构造 constructor(props) {  super(props); } static propTypes = {  auth:PropTypes.string.isRequired, }; render() {  if (tool.getAuth(this.props.auth)) {  return <ComposedComponent { ...this.props} />;  } else {  return null;  } }};

这个方法实际上是一个包装器,接受一个组件参数,根据权限,返回一个新的组件。

然后页面按钮的权限控制实现改成:

const AuthButton = wrapAuth(Button);class Page extends Component{ render() { return (  <div>  <AuthButton auth="createUser">创建用户</AuthButton>  </div> ); }}

当遇到前面所说的需求变动时,现在只要把包装器里return null这行代码改成

return <ComposedComponent disabled={true} { ...this.props} />

或者

return <ComposedComponent onClick={()=>alert("权限不足,请找管理员小K申请")} { ...this.props} />

就行啦。

嗯,高阶组件让生活又美好了一些~

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对的支持。

相关文章

excel表格怎么进行排名excel表格进

excel表格怎么进行排名excel表格进

步骤,方法,基础操作,表格,高级,  Excel表格中排名次也是一种使用非常广泛的应用,排序大家都会,如果按分数排序那么名字也会颠倒,我们要保证行列不变的情况下,新增一列排名对需要排序的列进行排名。比如姓名不动得分也不动,我们在名次那列进行…

关于Vue.nextTick | 的正确使用方

关于Vue.nextTick | 的正确使用方

使用方法,正确,电脑软件,Vue,nextTick,本文主要给大家介绍了关于Vue.nextTick()的正确使用,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍吧。什么是Vue.nextTick()官方文档解释如下:在下次 DOM 更新循环结束之后执行延迟回调。…

ES6新特性四:变量的解构赋值实例

ES6新特性四:变量的解构赋值实例

赋值,新特性,变量,实例,电脑软件,本文实例讲述了ES6新特性之变量的解构赋值。分享给大家供大家参考,具体如下:1. 数组的解构赋值//① 可以从数组中提取值,按照对应位置,对变量赋值var [a, b] = [1, 2]; //a = 1;b = 2//② 下面是一些使用嵌套数…

win8系统的word2013自动生成目录教

win8系统的word2013自动生成目录教

系统,教程,自动生成,目录,电脑软件,  win8现在使用的越来越普片,随着而来的很多问题也需要我们去解决,因此只有不断学习,不断进步了。那么下面就由小编给大家分享下win8系统下的word2013自动生成目录的技巧,希望能帮助到您。自动生成目录的步…

js实现不提示直接关闭网页窗口

js实现不提示直接关闭网页窗口

提示,网页,窗口,电脑软件,js,项目需要,用户在关闭当前页面时,可以点击页面中的按钮直接关闭网页窗口,但是不需要提示用户是否关闭窗口。在网上找了下,使用添加一句如下代码即可:window.open(‘','_self');function closePageForm(){ window.…

WPS演示如何使用荧光笔标记功能

WPS演示如何使用荧光笔标记功能

演示,标记,功能,如何使用,电脑软件,  在演讲过程中为了便于说明重点都会进行标记注释,熟练使用WPS演示中的荧光笔可以帮助演讲者更好的完成演讲过程。以下是小编为您带来的关于WPS演示使用荧光笔标记功能,希望对您有所帮助。WPS演示使用荧…

excel2013如何使用选择性粘贴功能

excel2013如何使用选择性粘贴功能

方法,选择性,功能,如何使用,电脑软件,  Excel2013提供了使用方便且功能强大的选择性粘贴功能,除了普通的粘贴外,还提供多种不同用途的粘贴方式。下面小编教你怎么在excel2013中使用选择性粘贴功能的方法,欢迎大家来到学习。excel2013中使用…

JavaScript 数据类型详解

JavaScript 数据类型详解

数据类型,详解,电脑软件,JavaScript,一,数据类型以下内容基于ES5(ES6引入了一种新的原始数据类型Symbol,表示独一无二的值。它是JavaScript语言的第七种数据类型。)JavaScript是一种弱类型动态语言,定义变量时无需指定类型,看似简单,但背后有繁琐…

怎么更改Excel2007插入图形的线条

怎么更改Excel2007插入图形的线条

图形,线条,颜色,电脑软件,  作为一个Excel菜鸟,就应该多学点Excel表格的操作方法。比如怎么修改插入图形的线条颜色,其实这个操作不是很难。以下是小编为您带来的关于更改Excel2007插入图形的线条颜色,希望对您有所帮助。更改Excel2007插入…

为输入框加入数字js校验代码分享

为输入框加入数字js校验代码分享

校验,数字,输入框,代码分享,电脑软件,js限制只能数字输入,并且在把输入的“非法字符”清除掉之后将焦点停留在输入非法字符的位置,参考如下:html部分:<input value="" type="text" onkeyup="javascript:RepNumber(this)">JavaScript部分:…

怎么在WPS表格中绘制xy散点图WPS表

怎么在WPS表格中绘制xy散点图WPS表

绘制,步骤,方法,表格,电脑软件,  排列在工作表的列或行中的数据可以绘制到XY散点图中。散点图显示若干数据系列中各数值之间的关系,或者将两组数绘制为xy坐标的一个系列。下面小编就教你怎么在WPS表格中绘制xy散点图。WPS表格中绘制xy散点…

jQuery鼠标移动上实现放大效果

jQuery鼠标移动上实现放大效果

鼠标移动,效果,电脑软件,jQuery,首先界面上要有图片,下面是图片<img id="big-circle" src="images/pic2.jpg" alt=""/>其次在script代码段中加入如下代码,进行适量修改即可$(document).ready(function () { var x = 10; var y …