前言

所谓高级组件,即:接受一个组件作为参数,并且其返回值也为一个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小时内与您取得联系。