关于taro1/2运行时的问题?

作者站长头像
站长
· 阅读数 6

我们都知道taro1/2是重编译时框架,「编译时」将react代码编辑成小程序代码,「运行时」抹平平台差异,那他为什么要在运行时抹平生命周期和api等平台差异呢?编译的时候不能直接抹平吗?

回复
1个回答
avatar
test
2024-06-27

Q: 编译的时候不能直接抹平吗?A:

  1. 实际业务代码太灵活了,编译时的ast分析根本抹平不了差异

     // 你确实可以拍着胸脯说,你不会写这种代码
     // 但是你控制不了别人不会写这种代码
     const methods = `${conditon ? 'navigate' : 'redirect'}To`
     Taro[methods].call(Taro, {})
  2. 有的平台确实不支持一些api的功能,需要用运行时的代码抹平

     // 还是拿路由跳转做例子
     Taro.navigateTo({
       url: 'test?id=1',
       events: {
     // 为指定事件添加一个监听器,获取被打开页面传送到当前页面的数据
     acceptDataFromOpenedPage: function(data) {
       console.log(data)
     },
     someEvent: function(data) {
       console.log(data)
     }
     ...
       },
       success: function (res) {
     // 通过eventChannel向被打开页面传送数据
     res.eventChannel.emit('acceptDataFromOpenerPage', { data: 'test' })
       }
     })
     // 转到h5平台就是
     location.href = 'test?id=1'

api里明明能支持events和success回调,你强行转成location.href = 'test?id=1',不觉得有问题吗?

回复
likes
适合作为回答的
  • 经过验证的有效解决办法
  • 自己的经验指引,对解决问题有帮助
  • 遵循 Markdown 语法排版,代码语义正确
不该作为回答的
  • 询问内容细节或回复楼层
  • 与题目无关的内容
  • “赞”“顶”“同问”“看手册”“解决了没”等毫无意义的内容