十年網(wǎng)站開發(fā)經(jīng)驗 + 多家企業(yè)客戶 + 靠譜的建站團隊
量身定制 + 運營維護+專業(yè)推廣+無憂售后,網(wǎng)站問題一站解決
前言
成都創(chuàng)新互聯(lián)公司是一家專注于成都網(wǎng)站設計、成都網(wǎng)站建設與策劃設計,陽新網(wǎng)站建設哪家好?成都創(chuàng)新互聯(lián)公司做網(wǎng)站,專注于網(wǎng)站建設10年,網(wǎng)設計領(lǐng)域的專業(yè)建站公司;建站業(yè)務涵蓋:陽新等地區(qū)。陽新做網(wǎng)站價格咨詢:028-86922220
所謂高級組件,即:接受一個組件作為參數(shù),并且其返回值也為一個react組件
而大家應該都知道,權(quán)限控制算是軟件項目中的常用功能了。在網(wǎng)站中,權(quán)限控制一般分為兩個維度:頁面級別和頁面元素級別。
我們來說說頁面元素粒度的權(quán)限控制。在某個頁面中,有個“創(chuàng)建用戶”的按鈕,管理員才能看到。
一般想到的做法類似這樣
class Page extends Component{ render() { let hasCreatePermission = tool.getAuth("createUser"); return ({hasCreatePermission ? : null}); } }
在當前用戶的權(quán)限列表中判斷是否有“創(chuàng)建用戶”的權(quán)限,然后控制按鈕的顯示和隱藏。
有一天,產(chǎn)品經(jīng)理說,“沒有權(quán)限的話,按鈕就置灰”。
于是代碼改成了這樣:
render() { let hasCreatePermission = tool.getAuth("createUser"); return ({hasCreatePermission ? : }); }
過了一個月,產(chǎn)品經(jīng)理又說,“沒有權(quán)限的話,按鈕也正常展示,只是點擊后給個'申請權(quán)限'的文案提示”。
額,硬著頭皮改了下代碼:
render() { let hasCreatePermission = tool.getAuth("createUser"); return ({hasCreatePermission ? : }); }
如果網(wǎng)站中只有幾個權(quán)限控制的按鈕還好,想象一下,如果有50+這樣的按鈕,內(nèi)心是不是想砍需求方?
需求方是不敢砍的。那么有沒有一種方法,可以統(tǒng)一控制無權(quán)限時候的表現(xiàn)呢?
有。讓我們來試試React的高階組件吧。
export let wrapAuth = ComposedComponent =>class WrapComponent extends Component { // 構(gòu)造 constructor(props) { super(props); } static propTypes = { auth:PropTypes.string.isRequired, }; render() { if (tool.getAuth(this.props.auth)) { return; } else { return null; } } };
這個方法實際上是一個包裝器,接受一個組件參數(shù),根據(jù)權(quán)限,返回一個新的組件。
然后頁面按鈕的權(quán)限控制實現(xiàn)改成:
const AuthButton = wrapAuth(Button); class Page extends Component{ render() { return (); } }創(chuàng)建用戶
當遇到前面所說的需求變動時,現(xiàn)在只要把包裝器里return null
這行代碼改成
return
或者
returnalert("權(quán)限不足,請找管理員小K申請")} { ...this.props} />
就行啦。
嗯,高階組件讓生活又美好了一些~
總結(jié)
以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學習或者工作能帶來一定的幫助,如果有疑問大家可以留言交流,謝謝大家對創(chuàng)新互聯(lián)的支持。