国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

Redux 登錄狀態(tài)判斷的一些實(shí)踐

isLishude / 2510人閱讀

摘要:高階函數(shù)驗(yàn)證中間件驗(yàn)證驗(yàn)證之所以用三種方式一起是因?yàn)楦唠A函數(shù)在性能調(diào)優(yōu)的時(shí)候并不是特別容易??偨Y(jié)高階函數(shù)適合用在子控件需要確定權(quán)限后渲染中間件適合無(wú)狀態(tài)頁(yè)面中的登錄狀態(tài)判斷驗(yàn)證,使用范圍就比較狹窄了。

最近一直在寫(xiě)一個(gè)React、Redux的前端項(xiàng)目,登錄狀態(tài)驗(yàn)證這一塊還是比較頭疼的。

我的實(shí)踐下有三種方式來(lái)驗(yàn)證用戶登錄狀態(tài),目前我選擇用三種方式一起用在項(xiàng)目里面。

Redux高階函數(shù)驗(yàn)證(High-Order Function)

Actions中間件驗(yàn)證

Component WillMount 驗(yàn)證

之所以用三種方式一起是因?yàn)?strong>Redux高階函數(shù)在性能調(diào)優(yōu)的時(shí)候并不是特別容易。

Redux高階函數(shù)驗(yàn)證
//把需要登錄狀態(tài)驗(yàn)證的Component傳入到這個(gè)高階函數(shù)中
export function requireAuthentication(Component) {
    class AuthenticatedComponent extends Component {
        constructor(props) {
            super(props)
        }
        //只在首次Mount時(shí)來(lái)驗(yàn)證權(quán)限
        componentWillMount() {
            this.checkAuth();
        }
        checkAuth(){
            const {path,isSignIn,dispatch}=this.props;
            if(!isSignIn){
                //沒(méi)有登錄
                //記錄當(dāng)前頁(yè)面path
                //跳轉(zhuǎn)到SignIn Page處理登錄 登錄完成夠會(huì)跳回當(dāng)前頁(yè)面
                dispatch(CommonActions.setNextUrl(path))
                browserHistory.push("/sign");
            }
        }
        render() {
            console.log("auth render")
            return (
                
{this.props.isSignIn == true ? : null }
) } } const mapStateToProps = (state) => ({ path:state.routing.locationBeforeTransitions.pathname, isSignIn:state.common.isSignIn, state:state }) return connect(mapStateToProps)(AuthenticatedComponent); }

你可以把它像這樣用在router中:

{ path:"courseCate",component:requireAuthentication(CourseCate)}

目前存在的一些問(wèn)題:

高階函數(shù)中傳入的最頂層的Component不能再使用connect

過(guò)多的高階函數(shù)生命周期的邏輯難以維護(hù)、性能隱患

Actions中間件驗(yàn)證
export function checkAuth(nextUrl,nextFn) {
    return (dispatch,getState)=>{
        //檢測(cè)用戶登錄情況
        if(!getState().common.isSignIn){
            //沒(méi)有登錄 記錄當(dāng)前path 
            //跳轉(zhuǎn)到sign page 登錄完成后 跳轉(zhuǎn)回來(lái)
            dispatch(setNextUrl(nextUrl));
            pushUrl("/sign");//封裝了 browserHistory.push(url)
        }else{
            //通過(guò)驗(yàn)證后 執(zhí)行下一個(gè)Fn
            dispatch(nextFn);
        }
    }
}

你可以像這樣用在你的Actions中

export function fetchFoo(url,conf) {

    return (dispatch,getState) => {
        if(shouldFetchFoo(getState())){
            dispatch(requestFetchFoo());
            return fetch(url,conf)
            .then(res=>res.json())
            .then(json=>{
                ...
            })
        }
    }
    
}
export function needFetchFoo(nextUrl,url,conf){
    retrun (dispatch)=>{
        dispatch(checkAuth(nextUrl,fetchFoo(url,conf)))
    }
}

目前存在的一些問(wèn)題:

雖然可以避免過(guò)多的高階函數(shù)函數(shù)導(dǎo)致頁(yè)面性能下降,但是無(wú)法很好滿足業(yè)務(wù)邏輯

驗(yàn)證如果未通過(guò)直接阻斷當(dāng)前操作

Component WillMount 驗(yàn)證

這基本上可以認(rèn)為是Actions中間驗(yàn)證的一種變種

export function checkAuthWithoutNextFn(nextUrl) {
    return (dispatch,getState)=>{
        //check if user sign in
        if(!getState().common.isSignIn){
            //if not set the nexturl 
            //and push url to sign page
            dispatch(setNextUrl(nextUrl));
            pushUrl("/sign");
        }
    }
}

你可以像這樣把他用在Component WillMount事件中

    componentWillMount(){
        const {dispatch} = this.props;
        dispatch(CommonActions.checkAuthWithoutNextFn("/coursecate"));
    }

目前存在的一些問(wèn)題:

權(quán)限未得到驗(yàn)證時(shí),不會(huì)阻斷子控件渲染,觸發(fā)子控件生命周期中的事件

舉個(gè)例子:
比如父控件中componetWillDidMount中調(diào)用該方法判斷用戶登錄狀態(tài)
fatherComponet.js

    componentWillMount(){
        const {dispatch} = this.props;
        dispatch(CommonActions.checkAuthWithoutNextFn("/coursecate"));
    }

然而子控件componentWillMount中有一個(gè)fetch是需要權(quán)限驗(yàn)證(此時(shí)父控件中并沒(méi)有阻斷子控件渲染,在父控件正在驗(yàn)證權(quán)限的同時(shí),子控件的fetch執(zhí)行了。高階函數(shù)可以阻斷子控件渲染)的。
雖然渲染順序是fatherComponet->childComponet
但是childComponet里的componentWillMount也是觸發(fā)了(也就是說(shuō),在未驗(yàn)證登錄情況下就觸發(fā)了fetch),可能會(huì)造成一些不必要的請(qǐng)求
我目前的處理方式:在子控件ComponentWillMount的fetch中加入一個(gè)shouldFetch()進(jìn)行請(qǐng)求前判斷。

總結(jié)

1.高階函數(shù)適合用在:子控件需要確定權(quán)限后渲染
2.actions中間件適合:無(wú)狀態(tài)頁(yè)面中的登錄狀態(tài)判斷
3.component驗(yàn)證,使用范圍就比較狹窄了。

大家雨露均沾

以上是我個(gè)人目前的一些小見(jiàn)解,歡迎各位指正和補(bǔ)充哈。

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/86374.html

相關(guān)文章

  • react技術(shù)棧實(shí)踐(從前到后擼一個(gè)電影搜集應(yīng)用)

    摘要:其實(shí),該復(fù)雜的東西在哪放都復(fù)雜,只不過(guò)現(xiàn)在更清晰一點(diǎn)使用不好的地方就是太繁瑣了,定義各種各種組件。。。。。 之前做了個(gè)好電影搜集的小應(yīng)用,前端采用react,后端采用express+mongodb,最近又將組件間的狀態(tài)管理改成了redux,并加入了redux-saga來(lái)管理異步操作,記錄一些總結(jié) 在線地址 手機(jī)模式 源碼 主要功能 爬取豆瓣電影信息并錄入MongoDB 電影列表展示...

    tigerZH 評(píng)論0 收藏0
  • 關(guān)于前端數(shù)據(jù)&邏輯思考

    摘要:這里引出了一個(gè)概念,就是數(shù)據(jù)流這個(gè)概念,在項(xiàng)目中我將所有數(shù)據(jù)的操作都成為數(shù)據(jù)的流動(dòng)。 最近重構(gòu)了一個(gè)項(xiàng)目,一個(gè)基于redux模型的react-native項(xiàng)目,目標(biāo)是在混亂的代碼中梳理出一個(gè)清晰的結(jié)構(gòu)來(lái),為了實(shí)現(xiàn)這個(gè)目標(biāo),首先需要對(duì)項(xiàng)目的結(jié)構(gòu)做分層處理,將各個(gè)邏輯分離出來(lái),這里我是基于典型的MVC模型,那么為了將現(xiàn)有代碼重構(gòu)為理想的模型,我需要做以下幾步: 拆分組件 邏輯處理 抽象、...

    alin 評(píng)論0 收藏0
  • 對(duì)服務(wù)端渲染一次實(shí)踐(帶你掌握服務(wù)端渲染)

    摘要:之前做的一個(gè)應(yīng)用,最近把首頁(yè)改成了服務(wù)端渲染的形式,過(guò)程還是很周折的,踩到了不少坑,記錄一些重點(diǎn),希望有所幫助前端使用的技術(shù)棧升級(jí)到升級(jí)到服務(wù)項(xiàng)目地址喜歡的給個(gè),感謝。。。。。。。 之前react做的一個(gè)應(yīng)用,最近把首頁(yè)改成了服務(wù)端渲染的形式,過(guò)程還是很周折的,踩到了不少坑,記錄一些重點(diǎn),希望有所幫助 前端使用的技術(shù)棧 react、react-dom 升級(jí)到 v16 react-ro...

    v1 評(píng)論0 收藏0
  • 一些基于React、Vue、Node.js、MongoDB技術(shù)棧實(shí)踐項(xiàng)目

    摘要:利用中間件實(shí)現(xiàn)異步請(qǐng)求,實(shí)現(xiàn)兩個(gè)用戶角色實(shí)時(shí)通信。目前還未深入了解的一些概念。往后會(huì)寫(xiě)更多的前后臺(tái)聯(lián)通的項(xiàng)目。刪除分組會(huì)連同組內(nèi)的所有圖片一起刪除。算是對(duì)自己上次用寫(xiě)后臺(tái)的一個(gè)強(qiáng)化,項(xiàng)目文章在這里。后來(lái)一直沒(méi)動(dòng),前些日子才把后續(xù)的完善。 歡迎訪問(wèn)我的個(gè)人網(wǎng)站:http://www.neroht.com/? 剛學(xué)vue和react時(shí),利用業(yè)余時(shí)間寫(xiě)的關(guān)于這兩個(gè)框架的訓(xùn)練,都相對(duì)簡(jiǎn)單,有的...

    tangr206 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<