背景🗺️
开发时遇到需要在自定义组件
内获取元素的位置的需求,对于小程序,需要采用到wx.createSelectorQuery()
这个API。但使用Taro
这个框架的话会有些不同🙁。
2. 代码对比
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. 结论
Taro
中,在自定义组件内,需要通过this.$scope
指向该组件,准确地说这是编译为小程序后的组件实例,而this
指向的是编译前的类react
实例;而小程序this
就是本身的组件实例。
所以SelectorQuery.in(Component component)
这个API在小程序中in(this)
就行,Taro
中in(this.$scope)
;
📃题外话
- 若为给节点加上
id
属性,Taro
的ref
会给绑定的这个节点一个随机字串的id
属性,并添加到ref._selector
属性上,即上面的写法。 -
query
获取的参数单位是px
,不是rpx
。
网友评论