美文网首页
关于Taro自定义组件中的SelectQuery的总结

关于Taro自定义组件中的SelectQuery的总结

作者: GrasFish | 来源:发表于2019-03-11 13:53 被阅读0次

    背景🗺️
    开发时遇到需要在自定义组件内获取元素的位置的需求,对于小程序,需要采用到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)就行,Taroin(this.$scope)

    📃题外话

    1. 若为给节点加上id属性,Taroref会给绑定的这个节点一个随机字串id属性,并添加到ref._selector属性上,即上面的写法。
    2. query获取的参数单位是px,不是rpx

    相关文章

      网友评论

          本文标题:关于Taro自定义组件中的SelectQuery的总结

          本文链接:https://www.haomeiwen.com/subject/uqnvpqtx.html