Taro 使用小程序原生第三方組件和插件

2021-09-23 21:10 更新
Taro 支持使用小程序的第三方組件和插件,例如 echarts-for-weixin,使用方式也異常的簡(jiǎn)單。

但是值得注意的是,如果在 Taro 項(xiàng)目引用了小程序原生的第三方組件和插件,那么該項(xiàng)目將不再具備多端轉(zhuǎn)換的能力,例如,如果使用了微信小程序的第三方組件,那么項(xiàng)目只能轉(zhuǎn)換成微信小程序,轉(zhuǎn)義成其他平臺(tái)會(huì)失效,使用其他小程序原生組件同理。

引入第三方組件

首先需要將第三方組件庫(kù)下載到項(xiàng)目的 src 目錄下,隨后在頁(yè)面或者組件里通過(guò)配置 usingComponents 指定需要引用的第三方組件即可,組件調(diào)用的時(shí)候需要按照 JSX 的使用規(guī)范來(lái)進(jìn)行傳參和事件綁定。

usingComponents 指定的第三方組件名字需要以小寫(xiě)開(kāi)頭。

  1. import Taro, { Component } from '@tarojs/taro'
  2. import { View } from '@tarojs/components'
  3. function initChart () {
  4. // ....
  5. }
  6. export default class Menu extends Component {
  7. static defaultProps = {
  8. data: []
  9. }
  10. constructor (props) {
  11. super(props)
  12. this.state = {
  13. ec: {
  14. onInit: initChart
  15. }
  16. }
  17. }
  18. componentWillMount () {
  19. console.log(this) // this -> 組件 Menu 的實(shí)例
  20. }
  21. render () {
  22. return (
  23. <View>
  24. <ec-canvas id='mychart-dom-area' canvas-id='mychart-area' ec={this.state.ec}></ec-canvas>
  25. </View>
  26. )
  27. }
  28. }
  29. // menu.config.js
  30. export default {
  31. // 定義需要引入的第三方組件
  32. usingComponents: {
  33. 'ec-canvas': '../../components/ec-canvas/ec-canvas' // 書(shū)寫(xiě)第三方組件的相對(duì)路徑
  34. }
  35. }

使用 Slot

在 React 中使用 <slot name="slotName" />(首字母小寫(xiě)),在 Vue 中使用 <slot-view name="slotName" />(由于 slot 在 Vue 中是內(nèi)置組件)。

引入插件

引入插件代碼包

使用插件前,使用者要在 app.confg.js 的配置中聲明需要使用的插件,例如

  1. // app.config.js
  2. export default {
  3. plugins: {
  4. myPlugin: {
  5. version: '1.0.0',
  6. provider: 'wxidxxxxxxxxxxxxxxxx'
  7. }
  8. }
  9. }

如上例所示, plugins 定義段中可以包含多個(gè)插件聲明,每個(gè)插件聲明以一個(gè)使用者自定義的插件引用名作為標(biāo)識(shí),并指明插件的 appid 和需要使用的版本號(hào)。其中,引用名(如上例中的 myPlugin)由使用者自定義,無(wú)需和插件開(kāi)發(fā)者保持一致或與開(kāi)發(fā)者協(xié)調(diào)。在后續(xù)的插件使用中,該引用名將被用于表示該插件。

使用插件

使用插件時(shí),插件的代碼對(duì)于使用者來(lái)說(shuō)是不可見(jiàn)的。為了正確使用插件,使用者應(yīng)查看插件詳情頁(yè)面中的“開(kāi)發(fā)文檔”一節(jié),閱讀由插件開(kāi)發(fā)者提供的插件開(kāi)發(fā)文檔,通過(guò)文檔來(lái)明確插件提供的自定義組件、頁(yè)面名稱(chēng)及提供的 js 接口規(guī)范等。

自定義組件

使用插件提供的自定義組件,和上述 “引入第三方組件” 的方式相仿,在頁(yè)面或組件的配置中定義需要引入的自定義組件時(shí),使用 plugin:// 協(xié)議指明插件的引用名和自定義組件名,例如:

  1. export default {
  2. // 定義需要引入的插件
  3. usingComponents: {
  4. 'hello-component': 'plugin://myPlugin/hello-component'
  5. }
  6. }

出于對(duì)插件的保護(hù),插件提供的自定義組件在使用上有一定的限制:

  • 默認(rèn)情況下,頁(yè)面中的 this.$scope.selectComponent 接口無(wú)法獲得插件的自定義組件實(shí)例對(duì)象;
  • Taro.createSelectorQuery 等接口的 >>> 選擇器無(wú)法選入插件內(nèi)部。

頁(yè)面

插件的頁(yè)面從小程序基礎(chǔ)庫(kù)版本 2.1.0 開(kāi)始支持。

需要跳轉(zhuǎn)到插件頁(yè)面時(shí),url 使用 plugin:// 前綴,形如 plugin://PLUGIN_NAME//PLUGIN_PAGE, 如:

  1. <Navigator url='plugin://myPlugin/hello-page'>
  2. Go to pages/hello-page!
  3. </Navigator>

js 接口

使用插件的 js 接口時(shí),可以使用 Taro.requirePlugin 方法。例如,插件提供一個(gè)名為 hello 的方法和一個(gè)名為 world 的變量,則可以像下面這樣調(diào)用:

  1. const myPluginInterface = requirePlugin('myPlugin')
  2. const myWorld = myPluginInterface.world
  3. myPluginInterface.hello()

注意事項(xiàng)

在使用第三方組件以及插件提供的組件時(shí),事件綁定的寫(xiě)法與原生寫(xiě)法略有不同,因?yàn)楸仨氉裱?Taro 中事件綁定的規(guī)范,例如,原生中引入第三方組件的寫(xiě)法

  1. <calendar binddayClick='dayClickHandler' />

那么在 Taro 中的寫(xiě)法則是

  1. <calendar onDayClick={this.dayClickHandler} />

請(qǐng)參考示例項(xiàng)目:https://github.com/NervJS/taro-sample-weapp


以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)