關(guān)于Taro自定義組件中的SelectQuery的總結(jié)

背景???
開發(fā)時(shí)遇到需要在自定義組件內(nèi)獲取元素的位置的需求,對(duì)于小程序,需要采用到wx.createSelectorQuery()這個(gè)API。但使用Taro這個(gè)框架的話會(huì)有些不同??。

2. 代碼對(duì)比

1.小程序

// index.js
onReady(){
  const query = wx.createSelectorQuery()
    .in(this)
    .select('#selectMe')
    .boundingClientRect()
    .exec(console.log);
}
<!--index.wxml-->
<view id='selectMe'></view>

2.Taro

// index.jsx
componentDidMount(){
+ const query = wx.createSelectorQuery()
    .in(this.$scope);
+   .select(this.ref._selector) // .select('.select Me')
    .boundingClientRect()
    .exec(console.log);
}

render(){
  <View 
    className="select Me"
    ref={node => this.ref = node}
  ></View>
}

3. 結(jié)論

Taro中,在自定義組件內(nèi),需要通過this.$scope指向該組件,準(zhǔn)確地說這是編譯為小程序后的組件實(shí)例,而this指向的是編譯前的類react實(shí)例;而小程序this就是本身的組件實(shí)例。
所以SelectorQuery.in(Component component)這個(gè)API在小程序中in(this)就行,Taroin(this.$scope);

??題外話

  1. 若為給節(jié)點(diǎn)加上id屬性,Taroref會(huì)給綁定的這個(gè)節(jié)點(diǎn)一個(gè)隨機(jī)字串id屬性,并添加到ref._selector屬性上,即上面的寫法。
  2. query獲取的參數(shù)單位是px,不是rpx
最后編輯于
?著作權(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)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

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