taro2升级taro3流程记录
- 建议直接新建一个最新的taro项目,从旧版本迁移到 Taro Next,这个根本没有一点作用,把 package.json 中使用的依赖手动一项一项的安装过来,虽然笨了一点,但是有效
- 项目中的config.js使用新建项目自带的,再把老项目中想要的配置加回来
上面的步骤完成后 npm run dev:weapp大概率可以运行起来了
接下来还需要进行的操作
- 把所有
import {Component} from "@tarojs/taro"替换成import {Component} from "react" - 修改app.js,删除
Taro.render(<App />, document.getElementById('app')),添加export default App; - 页面的 config
// 不支持这种config, 需要把config提到单独的文件里面去 xxx.config.js
config = {
navigationBarTitleText: "首页",
};
<!-- 或者使用下面的形式 -->
definePageConfig({
navigationBarTitleText: "首页",
})
- 路由,在旧版本中可以通过 this.$router 访问当前组件/页面路由的详情。在 Taro3x 对应的 API 是在 @tarojs/taro 中的 getCurrentInstance().router,两者的属性一模一样。
- 样式,Taro3x中没有组件的外部样式和全局样式 的概念,组件的配置(config.js)是无效的,页面和入口文件引入的 CSS 都会变成全局 CSS ,没有了 externalClasses 和 addGlobalClass 这两个概念。推荐使用CSS Modules。Taro中使用 CSS Modules。
推荐使用自定义转换模式,这样的话就不会影响到一些第三方库的样式了!!!
一般情况下,我们在
app.js中会引入样式文件,import './app.less'这个样式文件在Taro3中一定要保证只能在 app.js 中引入 其它文件不能引入这个文件,否则编译成的微信小程序中不会生成app.wxss文件, 会导致如果你⻚面存在嵌套过深的组件就 会导致部分组件的样式丢失 taro不生成app.wxss文件
- this指向问题
// 在Taro2x当中你可能会这样写一些函数,这个this还是指向taro中的实例,可以从props中解构
// 但在Taro3中,你需要 把这个函数改成箭头函数的形式 才能保证不会出错 swichEdit = () => {}
swichEdit() {
const { id } = this.props
this.getUserInfo(id)
}
- 标签未引入,例如在代码中使用 Image 组件,但并没有从
@tarojs/components引入,在2x中可能不会报错,但在3x中一定会报错
当小程序中有接入微信卡包,页面分享等需要获取外部链接进入小程序的参数,特别注意 2 和 3 中细微的差异,所有需要分享的参数必须经过encodeURIComponent加密,使用的时候使用decodeURIComponent,升级完成后,要尽可能的测试这方便的逻辑,在我自己升级的时候,我就发现这个参数情况特别复杂,相同的写法在 2 和 3 中获取到的参数不一样
升级后的性能提升,打包和编译速度提升很明显
- 打包
- 编译