1. 程式人生 > >Taro開發微信小程式實現簡單的登入退出功能

Taro開發微信小程式實現簡單的登入退出功能

Taro是由凹凸實驗室打造的一套遵循 React 語法規範的多端統一開發框架,還有我發現從某度上搜索的結果首頁居然看不到Taro框架的任何資訊,但是谷歌首頁就直接給出了結果,Taro使用文件。我是準備用它來開發微信小程式的,而且公司使用的前端架構正好是React,感覺冥冥之中一切自有定數。
一些初始化的例子我這裡不多說了,官方說的很詳細了,我選擇的初始化方式是使用redux,Sass,並且不開啟TypeScript.
首先我們要進入的頁面是index.js
試想一下,如果你第一次使用這款應用的時候需要登入,那麼你第二次肯定不會想再登入一次了,所以依託微信這個母體,小程式可以在進入頁面時直接載入本地的一些資訊,所以我們可以在componentWillMount

中呼叫

Taro.getStorage({key:'userInfo'}).then(rst => {   //從快取中獲取使用者資訊
	this.props.setBasicInfo(rst.data)
})

這個函式也很簡單,下面看一下action 和 reducer

export const setBasicInfo = (param) => {
    // console.log('222',param)
    return {
        type: BASICINFO,
        payload: param
    }
}
switch (action.type) {
     case BASICINFO:
         // console.log('i am here',action)
         return {
             ...state,
             basicinfo: action.payload
         }
     default:
         return state
 }

這個BASICINFO就是和初始化時給出的樣例一樣,在常量中定義的一個值。這樣一來,如果上次登入過的話,這次一進入到專案,就可以直接獲取使用者資訊了。
接下來做一個登入頁面,UI 大概就寫這個樣子,

<View className='index'>
    <View>
        <Text>申請獲取你的公開資訊(暱稱、頭像等)</Text> 
        <Button open-type='getUserInfo' onGetUserInfo={this.getUserInfo} > 微信授權 </Button>
    </View>
</View >

雖說封裝了框架,很多還是支援微信小程式的寫法的,比如open-type,這個和原生的寫法並沒有什麼出入。

getUserInfo = (userInfo) => {
    console.log('userinfo',userInfo)
    if(userInfo.detail.userInfo){   //同意
        this.props.setBasicInfo(userInfo.detail.userInfo) //將使用者資訊存入redux
        Taro.setStorage({key:'userInfo',data:userInfo.detail.userInfo}).then(rst => {  //將使用者資訊存入快取中
            Taro.navigateBack()
        })
    } else{ //拒絕,保持當前頁面,直到同意 
    }
}

看現在的邏輯,登入之後,就可以把使用者資訊儲存到快取中了,下次進入小程式,也不會需要你登入了。而且注意一下Taro.navigateBack(),他可以跳轉回到login之前的介面,實為***點睛之筆***。
頁面UI大概可以是這個樣子:其中的className為引入的全域性樣式,使用的是Taro-ui,但是Taro-ui沒有和框架繫結,需要使用者自行下載。不過使用什麼無所謂,意思到位就好。

<View className='index'>
    <View className='at-row userinfo'>
        <View className='at-col at-col-3 userinfo-avatar'>
            <AtAvatar openData={{type:'userAvatarUrl'}} circle></AtAvatar>
        </View>
        <View className='at-col at-col-9'>
            {
                basicinfo.nickName 
                    ? <Text>{basicinfo.nickName}</Text>
                    : <AtButton size='small' onClick={this.login}>登入</AtButton>
            }
        </View>
    </View>
    <View>
        <AtList>
            <AtListItem title='個人資訊' note='可修改單位、電話等資訊' arrow='right' onClick={this.personInfo} />
        </AtList>
    </View>
    {
        basicinfo.nickName 
            ?  <View className='logout-btn'>
                <AtButton size='small'  onClick={this.logout}>退出賬號</AtButton>
            </View>
            : null
    }
    <View className='logout-model'>
        <AtModal
            isOpened={isOpened}
            title='確定退出?'
            cancelText='取消'
            confirmText='確認'
            onCancel={this.handleCancel}
            onConfirm={this.handleConfirm}
            content='退出登入後將無法檢視會議,重新登入即可檢視'
        />
    </View>
    
</View >

這裡有判斷邏輯,點選退出就清除快取內容,點選登入跳轉,然後登入成功再跳回來。

login = () => {
    Taro.navigateTo({url: '/pages/login/login'});
}
logout = () => {
    this.setState({isOpened:true})
}
handleCancel = () => {
    this.setState({isOpened:false})
}
handleConfirm = () => {
    this.props.setBasicInfo('') //將使用者資訊存入redux
    Taro.removeStorageSync('userinfo')
    this.setState({isOpened:false})
}
personInfo = () => {
    Taro.navigateTo({url: '/pages/info/info'});
}

這樣就實現了簡單的登入登出功能,希望給入門的朋友帶來一點幫助,謝謝。