钉钉小程序的那些坑(持续更新)

  • 内容
  • 评论
  • 相关

最近在做钉钉小程序,说起来真的一言难尽,总的来说给我的感觉就是,钉钉小程序就是个半成品,相比起来微信小程序就要好得多,近些年阿里的产品给我的印象都不是很好,我曾一度认为阿里很多项目是外包的。

闲话不多说,开始写坑:

1.钉钉小程序前端文档不能看钉钉里面的文档,需要看支付宝的文档,因为钉钉文档不是最新的,不全(比如Component2 钉钉里压根没有,这对新手是超级大坑)

2.钉钉小程序的html分组件和页面2种,如果要分模块写只能选择组件,但是部分组件在组件里写会和在页面里写不一样。

3.钉钉的网络请求只支持get和post,而且由于不支持json对象传参,需要把head头改成headers:{'Content-Type': 'application/x-www-form-urlencoded;charset=utf-8'},后端也需要做相应修改。

4.父组件现在已经可以调用子组件的方法,要使用ref,需要用Component2 编译,需要看支付宝的文档,钉钉没有。

5.picker组件的onChange选取消也会触发,但是模拟器里不会。

6.某些标签会莫名出现一些class,原因不明。

7.am-checkbox 在组件环境下使用ctrlChecked,会导致显示不刷新,并且这个组件checked只能初始化的时候修改状态,所以如果需要中途手动修改需要用到ctrlChecked,但是ctrlChecked组件下又有bug。还不如自己封装一个或者直接使用radio活checked。

8.钉钉小程序没有双向绑定的语法糖,所以你要双向绑定只能每个组件写事件。

9.用户改变了组件的某个值,你想还原,你会发现不能还原,因为value这时一样的,原因就如上面所说,需要做双向绑定。

10.钉钉小程序没观察特定参数变化的函数,就是没有watch,只能靠didUpdate或deriveDataFromProps(Component2)。

11.input的type 就算是number形的 放默认参数还是需要用string类型,不然会出问题

12.在a:if和for循环里面的组件只会触发初始化声明周期(如didMount),不会触发didUpdate,所以写组件的时候要不didMount,didUpdate,同时触发初始化组件,要不就是用deriveDataFromProps,不过deriveDataFromProps需要用Component2编译。

13.redirectTo在有时候需要settimeout后调用,不然有可能会报错(不知道原因,但是报错不影响使用)

14. receiveData: worker render components is not sync 有可能是因为绑定的值为null

15.error: 14, errorMessage: "Parse response, http request decode failed:Errorxxxxxxx 可能是证书过期,用http试试。

16.钉钉小程序的开发工具非常耗内存,随便运行一会儿内存就能爬到6g

17.真机测试有时候包会有问题,不知道原因,只能说先用预览测试。

18.钉钉小程序没有获取当前路由地址的方法

19.在钉钉小程序中使用axios可以下载第三方插件axios-miniprogram-adapter,然后:

import axios from "axios";
import mpAdapter from 'axios-miniprogram-adapter'
axios.defaults.adapter = mpAdapter

但是这样依然会有兼容性问题,第三方在抛错的时候会丢掉status,本人比较懒解决办法是直接修改了依赖(直接打开node_modules找到代码改),大家可以选择down下来改完后重新npm

case 'alipay':
// https://docs.alipay.com/mini/api/network
// if ([14, 19].includes(error.error)) {
//     reject(createError('Request aborted', config, 'ECONNABORTED', ''));
// }
// else if ([13].includes(error.error)) {
//     // timeout
//     reject(createError('timeout of ' + config.timeout + 'ms exceeded', config, 'ECONNABORTED', ''));
// }
// else {
//     // NetWordError
//     reject(createError('Network Error', config, null, ''));
// }
// break;
reject(error);

我注释它自己写的createError,改成直接抛出error,觉得config有用的可以自己重新封装个error。

src=http___img1.mydrivers.com_img_20200213_0bf2a163adf04a32a88c0e8c07cba3ea.jpg&refer=http___img1.mydrivers.jpg

随着用钉钉项目越来越多,后续还会列举一些坑,上面不少坑本人花了很长时间才发现解决,并且百度都是找不到,所以新手好好看,可以减去不少踩坑的时间。

评论

11条评论
  1. Gravatar 头像

    一筐猪 回复

    大佬大佬大佬。为什么在小程序使用put请求,在控制台打印的参数是json 格式的,传给后台的就是用=&拼接 的数据呀 🙁

  2. Gravatar 头像

    匿名 回复

    钉钉小程序想要用 put delete 请求应该怎么办呀 大佬 还有就是钉钉引入axios 用的时候提示adapter is not a function ❓ ❓ ❓

    • Gravatar 头像

      ajex 回复

      @匿名 put delete 让后台改成get post

      • Gravatar 头像

        一筐猪 回复

        @ajex 😳 前端有什么解决办法吗 大佬

        • Gravatar 头像

          ajex 回复

          @一筐猪 可以去阿里找到开发人员暴打他们改规则

          • Gravatar 头像

            匿名

            @ajex 哈哈哈哈哈哈

    • Gravatar 头像

      ajex 回复

      @匿名 axios 的问题我已经更新文章了 你可以看一下

      • Gravatar 头像

        一筐猪 回复

        @ajex 你太牛了!!大佬 😀 😀 😀 已解决

  3. Gravatar 头像

    喝醉的肉包子 回复

    很实用,谢谢
    还有跳转当前switchTab 不刷新生命周期

      • Gravatar 头像

        匿名 回复

        @喝醉的肉包子 我写了钉钉小程序的版本更新,但是安卓可以更新,苹果部分用户没有更新

ajex进行回复 取消回复

电子邮件地址不会被公开。