关于taro1/2运行时的问题?-灵析社区

开挂思想家

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

阅读量:314

点赞量:10

问AI
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'",不觉得有问题吗?