何喜阳博客

Taro调用API报错is not a function,最新的API怎么使用?

经常在 Taro 社区和 Taro QQ 群看到类似的反馈:

微信小程序更新了用户授权的相关,不知道 Taro 适配了没有。
Taro 什么时候支持 getUserProfile 方法
什么时候支持 wx.onCopyUrl 这个接口

这些问题其实都是“微信等小程序平台更新了 API,而 Taro 团队还没有及时适配”,遇到这种情况应该怎么办?如果你直接使用Taro.xxx进行调用很有可能会遇到如下错误信息:

'使用Taro未适配的API报错'
旧版本调用 Taro 暂未适配 API 时的报错如截图所示,新版本是这种报错
VM826 WAService.js:2 TypeError: _tarojs_taro__WEBPACK_IMPORTED_MODULE_7___default.a.startFacialRecognitionVerify is not a function

其实这种情况特别容易解决,官方也给我们了解决办法,总的来说有以下 2 种办法:

1. 直接使用各平台前缀进行调用

比如微信更新了授权接口,在使用微信原生开发时的调用语句是

wx.getUserProfile({
  desc: '用于完善会员资料',
  success: (res) => {},
})

那我们在 Taro 代码中也直接这样写就可以使用,如果是跨端项目或者稳妥起见,则需要添加判断语句,只在特定端使用。

// 以下代码可以在Taro项目中使用微信新出的API
if (process.env.TARO_ENV === 'weapp') {
  wx.getUserProfile({
    desc: '用于完善会员资料',
    success: (res) => {},
  })
}

上面的示例代码是微信小程序的,但支付宝小程序、头条小程序等平台新接口也是一样的道理,直接使用就可以了。因为没有类型定义,编译器可能报错,但不影响编译和运行。

2. 使用 Taro 插件为小程序平台注入 API

其实这种接口没法及时适配的情况 Taro 官方也知道,为了大家能使用最新的 API,最近官方出了一个插件 @tarojs/plugin-inject 就是帮我们解决这个问题的。

插件地址:https://github.com/NervJS/taro-plugin-injectopen in new window

安装 在 Taro 项目根目录下安装

npm i @tarojs/plugin-inject --save

使用 引入插件

请确保 Taro CLI 已升级至 Taro 3.1.0 的最新版本。

修改项目 config/index.js 中的 plugins 配置为如下

const config = {
  plugins: [
    [
      '@tarojs/plugin-inject',
      {
        // 配置项
      },
    ],
  ],
}

配置项有很多种,具体的参数可以去查看官方说明,我这里只针对 api 修改做出示例。

支持小程序新增同步的 API 需要配置 syncApis

const config = {
  plugins: [
    [
      '@tarojs/plugin-inject',
      {
        // 配置需要新增的 API
        syncApis: ['a'],
      },
    ],
  ],
}

运行时即可调用此新增的 API:

Taro.a()

支持小程序新增异步的 API 需要配置 asyncApis

const config = {
  plugins: [
    [
      '@tarojs/plugin-inject',
      {
        // 配置需要新增的 API
        asyncApis: ['b'],
      },
    ],
  ],
}

运行时即可调用此新增的 API:

Taro.b()
  .then(() => {})
  .catch(() => {})

以上两种方式都可以解决最新 API 使用的问题,第 1 种办法是 Taro1、Taro2、Taro3 都通用的操作办法,第 2 种办法只支持最新的 Taro3,可以根据自己的实际情况选择方案。

以上就是全部内容了。如果你觉得内容有帮助,可以扫码打赏,请我吃一顿饭。

微信支付宝

当前页面地址:https://hexiyang.cn/article/1619142539.html

内容基于 《自由转载-非商用-非衍生-保持署名》 协议发布,允许非商用转载,需要保留作者姓名和当前页面链接。