全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

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

就行啦。

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

总结

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


# react  # 高阶组件  # 权限控制  # reactjs  # React 高阶组件HOC用法归纳  # React高阶组件的使用浅析  # React组件重构之嵌套+继承及高阶组件详解  # React学习笔记之高阶组件应用  # 浅谈React高阶组件  # React 高阶组件入门介绍  # 深入理解React高阶组件  # React HOC高阶组件深入讲解  # 没有权限  # 高阶  # 是一个  # 几个  # 好了  # 有个  # 过了  # 让我们  # 一个月  # 要把  # 就行  # 这篇文章  # 也为  # 又说  # 谢谢大家  # 硬着头皮  # 改了  # 给个  # 这行  # 改成了 


相关文章: 北京网站制作费用多少,建立一个公司网站的费用.有哪些部分,分别要多少钱?  如何选择长沙网站建站模板?H5响应式与品牌定制哪个更优?  建站之星收费标准详解:套餐费用及年费价格表一览  如何在Windows虚拟主机上快速搭建网站?  专业制作网站的公司哪家好,建立一个公司网站的费用.有哪些部分,分别要多少钱?  建站之星如何防范黑客攻击与数据泄露?  如何选择适配移动端的WAP自助建站平台?  详解免费开源的.NET多类型文件解压缩组件SharpZipLib(.NET组件介绍之七)  ,制作一个手机app网站要多少钱?  韩国网站服务器搭建指南:VPS选购、域名解析与DNS配置推荐  北京制作网站的公司,北京铁路集团官方网站?  实现点击下箭头变上箭头来回切换的两种方法【推荐】  网站网页制作专业公司,怎样制作自己的网页?  如何设置并定期更换建站之星安全管理员密码?  如何在沈阳梯子盘古建站优化SEO排名与功能模块?  建站主机核心功能解析:服务器选择与网站搭建流程指南  香港代理服务器配置指南:高匿IP选择、跨境加速与SEO优化技巧  建站之星如何快速更换网站模板?  制作企业网站建设方案,怎样建设一个公司网站?  详解jQuery中基本的动画方法  常州自助建站:操作简便模板丰富,企业个人快速搭建网站  可靠的网站设计制作软件,做网站设计需要什么样的电脑配置?  专业网站建设制作报价,网页设计制作要考什么证?  如何选择可靠的免备案建站服务器?  品牌网站制作公司有哪些,买正品品牌一般去哪个网站买?  建站之星备案流程有哪些注意事项?  建站主机功能解析:服务器选择与快速搭建指南  南阳网站制作公司推荐,小学电子版试卷去哪里找资源好?  如何获取PHP WAP自助建站系统源码?  c++如何打印函数堆栈信息_c++ backtrace函数与符号名解析【方法】  非常酷的网站设计制作软件,酷培ai教育官方网站?  大连网站设计制作招聘信息,大连投诉网站有哪些?  定制建站价位费用解析与套餐推荐全攻略  高性能网站服务器部署指南:稳定运行与安全配置优化方案  云南网站制作公司有哪些,云南最好的招聘网站是哪个?  如何通过网站建站时间优化SEO与用户体验?  建站主机类型有哪些?如何正确选型  c# 在高并发下使用反射发射(Reflection.Emit)的性能  深圳企业网站制作设计,在深圳如何网上全流程注册公司?  如何选择建站程序?包含哪些必备功能与类型?  网站视频怎么制作,哪个网站可以免费收看好莱坞经典大片?  常州自助建站工具推荐:低成本搭建与模板选择技巧  网页设计与网站制作内容,怎样注册网站?  制作网站的模板软件,网站怎么建设?  模具网站制作流程,如何找模具客户?  网站插件制作软件免费下载,网页视频怎么下到本地插件?  制作旅游网站html,怎样注册旅游网站?  建站之星与建站宝盒如何选择最佳方案?  网站制作中优化长尾关键字挖掘的技巧,建一个视频网站需要多少钱?  如何高效搭建专业期货交易平台网站? 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。