Taro:taro框架開(kāi)發(fā)小程序

前言:taro是一個(gè)可以很好實(shí)現(xiàn)一次開(kāi)發(fā),多端統(tǒng)一的框架,本文只介紹它小程序端開(kāi)發(fā)的一些內(nèi)容。

使用taro框架需要的知識(shí)儲(chǔ)備:

????????????1.熟悉react語(yǔ)法,否則選用taro需要一定學(xué)習(xí)成本

????????????2.redux熟悉最好,就像redux官網(wǎng)說(shuō)的一樣,"當(dāng)你覺(jué)得需要redux時(shí)候再用它,否則react就夠用了"

? ? ?????????react中文學(xué)習(xí)文檔:https://react.docschina.org/docs/hello-world.html

? ? ?????????redux中文學(xué)習(xí)文檔:http://www.redux.org.cn/

小程序項(xiàng)目搭建

gitup已經(jīng)有很清楚的說(shuō)明:https://github.com/NervJS/taro

主要操作步驟及命令:

1.cnpm install -g @tarojs/cli

全局安裝taro腳手架,此處我用的是淘寶鏡像cnpm,

淘寶鏡像配置命令:npm install -g cnpm --registry= https://registry.npm.taobao.org

安裝過(guò)程中會(huì)問(wèn)你是否需要redux模板,可以先不要,等感覺(jué)確實(shí)需要redux再添加,

ts如果不會(huì)的話(huà)也不需要安裝

2.cnpm run dev:weapp

開(kāi)發(fā)環(huán)境開(kāi)啟,現(xiàn)在你只需要打開(kāi)微信開(kāi)發(fā)者工具,在小程序項(xiàng)目中引入安裝腳手架的目錄就好了

是不是很簡(jiǎn)單?

下面講講開(kāi)發(fā)過(guò)程遇見(jiàn)的坑:

1.事件綁定傳參

本人喜歡用es6方式傳值,但是在taro使用es6傳值編譯會(huì)出錯(cuò),所以在使用taro制作小程序時(shí)建議使用.bind傳值,如點(diǎn)擊事件傳值:

onClick={this.onClick.bind(this,num)}

? 2.底部TabBar使用

官方的**TabBar**配置只要在**app.js**中配置好就行了,但是官方的**TabBar**只提供了部分屬性不好擴(kuò)展,如果需要擴(kuò)展,建議自定義開(kāi)發(fā)

3.小程序場(chǎng)景和頁(yè)面參數(shù)的獲取值獲取

小程序場(chǎng)景值獲取需要注意一點(diǎn) ,: **只能在app.js的componentWillMount生命周期獲取**,直接上代碼

? ? const params = this.$router.params;//獲取所有參數(shù)

? ?const query = params.query ;//query里面是鏈接上帶的參數(shù)

?const scene = params.scene ;//scene為場(chǎng)景值

如果在其他頁(yè)面中使用 this.$router.params ,如果鏈接帶參數(shù),得到的就是參數(shù)對(duì)象;如果不帶參數(shù),得到的是頁(yè)面路徑,是拿不到scene場(chǎng)景值的,如果開(kāi)發(fā)者需要場(chǎng)景值做一些事情,最好在 app.js中拿到scene儲(chǔ)存到本地

4.video組件使用時(shí)的一些坑

(1) poster屬性設(shè)置的背景圖無(wú)效 ,會(huì)一閃而過(guò);

(2) 網(wǎng)上所說(shuō)的,用cover-view或者cover-image,在視頻組件外套一層,親測(cè)在開(kāi)發(fā)者工具下可以,但是真機(jī)調(diào)試下不行,代碼如下:

<video id="myVideo"? class="video-xx" src="{{videoUrl}}" controls><cover-view class="controls"> <cover-image class="img"? src="{{img}}" /> </cover-view> </video>

本人的解決方案是,先隱藏Video組建,顯示背景圖;點(diǎn)擊背景圖再調(diào)用播放視頻接口,解絕了這個(gè)問(wèn)題,代碼如下:

? ? <Video className='video' src='{video}? ?style={this.state.videoStyle}? controls={true}> </Video>? ? ?<View class='img_box' style={this.state.viewStyle}><Image className='img' src={Play} onClick={this.play} /></View>

在play 方法中加入

? ? ? ?const video = Taro.createVideoContext('video');video.play();

(4) video不能設(shè)置圓角樣式,在開(kāi)發(fā)者工具中可以展示圓角,真機(jī)上是無(wú)效的

5.獲取微信授權(quán),手機(jī)號(hào)登錄小程序

獲取微信授權(quán),拿到手機(jī)號(hào)登錄小程序,使用該功能前要注意一點(diǎn):該功能僅支持企業(yè)版小程序

下面講講該功能遇見(jiàn)的坑:

(1)使用該功能需要先獲取登錄的code碼,傳輸code到后臺(tái)接口獲取到session_key,獲取code,最好是在componentWillMount生命周期里面,不要放在getPhoneNumber()(授權(quán)獲取手機(jī)號(hào)的方法中),否則多次操作獲取手機(jī)號(hào)操作會(huì)出現(xiàn)session_key失效的問(wèn)題,直接上代碼:

//首先按鈕上做好事件綁定

?<Button openType='getPhoneNumber'

onGetPhoneNumber={this.getPhoneNumber.bind(this)}>微信快速登錄</Button>

//componentWillMount生命周期獲取code

? ? Taro.login().then(res => {

? ?if (res.code) {

? ? this.setState({

? ? code: res.code

?})}})

//getPhoneNumber獲取授權(quán)解密手機(jī)號(hào)登錄

getPhoneNumber(e)

暫時(shí)先寫(xiě)這么多,后面會(huì)再補(bǔ)充一些,這里有個(gè)簡(jiǎn)單的小程序(涉及到的功能:手機(jī)號(hào)授權(quán)登陸,手機(jī)驗(yàn)證碼登陸,登出,頁(yè)面跳轉(zhuǎn)的交互,視頻播放等),項(xiàng)目git地址:

https://github.com/qzp199510/market

接口api封裝參考文章地址:

https://segmentfault.com/a/1190000016533592

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀(guān)點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容