Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Taro 3.1 #8731

Merged
merged 141 commits into from
Feb 24, 2021
Merged

Taro 3.1 #8731

merged 141 commits into from
Feb 24, 2021

Conversation

Chen-jj
Copy link
Contributor

@Chen-jj Chen-jj commented Feb 24, 2021

Breakings

一、React

项目的 React 版本必须 >= 16.14.0,或使用 17.0.0+

二、Vue2

1. 修复 Vue2 入口组件生命周期多次触发的问题,#7179

用户编写的入口组件需要修改如下:

// app.js

// 3.0
const App = new Vue({})

// 3.1
const App = {}

HighLights

一、开放式架构

近年来业界推出的小程序平台越来越多,但 Taro 核心维护的平台只有 6 个,因此常常有同学提出能不能支持某某平台的 Feature Request。

基于目前的架构,支持一个新的平台开发复杂度高,同时社区也难以参与贡献。

为此我们把 Taro 打造成为一个开放式框架,通过端平台插件能支持任意小程序平台

基于开放式架构,我们新增了一些有趣的插件,也十分期待大家利用它施展创意。

新增的插件:

插件 功能
@tarojs/plugin-platform-weapp-qy 编译企业微信小程序
@tarojs/plugin-platform-alipay-dd 编译钉钉小程序
@tarojs/plugin-platform-alipay-iot 编译支付宝 IOT 小程序
@tarojs/plugin-inject 为所有小程序平台快速新增 API组件调整组件属性

二、新增小程序性能优化组件 CustomWrapper

Taro3 使用 <template> 进行渲染,所有的 setData 都由页面对象调用。如果页面结构比较复杂,更新的性能就会下降。

为此我们增加了一个基础组件 CustomWrapper,它的作用是创建一个原生自定义组件。对后代节点的 setData 将由此自定义组件进行调用,达到局部更新的效果,从而提升更新性能。

开发者可以使用 CustomWrapper 去包裹遇到更新性能问题的组件:

<CustomWrapper>
  <GoodsList>
    <Item />
    <Item />
    // ...
  </GoodsList>
</CustomWrapper>

三、原生小程序支持渐进式使用 Taro 开发

过去我们对在 Taro 项目中混合使用原生的支持度较高。相反地,对在原生项目中混合使用 Taro 却没有太重视。但是市面上有着存量的原生开发小程序,他们接入 Taro 开发的改造成本往往非常大,最后只得放弃混合开发的想法。

经过与京喜拼拼项目的合作,也驱使了我们更加关注这部分需求。Taro 推出了一套完整的原生项目混合使用 Taro 的方案。

方案主要支持了三种场景:

  • 在原生项目中使用 Taro 开发的页面。(已完成)
  • 在原生项目的分包中运行完整的 Taro 项目。(已完成)
  • 在原生项目中使用 Taro 开发的自定义组件。(正在开发中)

希望以上方案能满足打算逐步接入 Taro 开发的同学。更多意见也欢迎在 Github 上给我们留言。

四、拥抱 React 17、TypeScript 4

1. 如何使用

新项目:

模板默认依赖 React 17、TypeScript 4,可直接使用。

旧项目:

手动升级项目中 reactreact-domtypescript@typescript-eslint/parser@typescript-eslint/eslint-plugin 的版本。

2. 改动

3.1 默认支持 New JSX Transform,开发者可以不在书写 JSX 前先引入 React

旧项目升级 React 17 的开发者还需要设置 ESLint 配置:

// .eslintrc
module.exports = {
  "extends": ["taro/react"],
  "rules": {
    "react/jsx-uses-react": "off",
    "react/react-in-jsx-scope": "off"
  }
}

如果不希望打开此功能,可以配置 Babel Taro preset 的 reactJsxRuntime 选项为 classes

// babel.config.js
module.exports = {
  presets: [
    ['taro', {
      framework: 'react',
      ts: true,
      reactJsxRuntime: 'classes'
    }]
  ]
}

2.2 H5 端编译 React 时默认开启 fast refresh

如果不希望打开此功能,可以修改 Taro 配置项和配置 Babel Taro preset:

// config/index.js
const config = {
  h5: {
    devServer: {
      hot: false
    }
  }
}
// babel.config.js
module.exports = {
  presets: [
    ['taro', {
      framework: 'react',
      ts: true,
      hot: 'false'
    }]
  ]
}

特性

  • 组件 View 增加 catchMove 属性,解决滚动穿透问题。

修复

重要

小程序

H5

升级指南

从 v2.x 升级的同学需要先按 迁移指南 进行操作。

从 v3.x 升级的同学,首先需要安装 v3.1 的 CLI 工具:

npm i -g @tarojs/cli

然后进入项目,删除 node_modulesyarn.lockpackage-lock.json

最后把 package.json 文件中 taro 相关依赖的版本修改为 3.1.0,再重新安装依赖。至此升级结束。

End

最后,衷心感谢为 Taro 从 v3.0 走到 v3.1 贡献过代码的各位同学!

1. 为 isBuildPlugin 提供默认值,小程序平台插件可选是否传入此参数
2. 删除过去版本遗留的 isUseComponentBuildPage 配置的类型定义
使 runtime 可以被 tree shaking
* #7590
* fix(size): 尺寸计算错误
# Conflicts:
#	lerna.json
#	packages/babel-plugin-transform-taroapi/package.json
#	packages/babel-preset-taro/package.json
#	packages/eslint-config-taro/package.json
#	packages/eslint-plugin-taro/package.json
#	packages/postcss-plugin-constparse/package.json
#	packages/postcss-pxtransform/package.json
#	packages/shared/package.json
#	packages/taro-api/package.json
#	packages/taro-cli/package.json
#	packages/taro-cli/src/presets/platforms/swan.ts
#	packages/taro-components/package.json
#	packages/taro-extend/package.json
#	packages/taro-h5/package.json
#	packages/taro-helper/package.json
#	packages/taro-loader/package.json
#	packages/taro-mini-runner/package.json
#	packages/taro-react/package.json
#	packages/taro-router/package.json
#	packages/taro-runner-utils/package.json
#	packages/taro-runtime/package.json
#	packages/taro-service/package.json
#	packages/taro-webpack-runner/package.json
#	packages/taro-with-weapp/package.json
#	packages/taro/apis/wx.js
#	packages/taro/package.json
#	packages/taroize/package.json
@Chen-jj Chen-jj added the V-3 Version - 3.x label Feb 24, 2021
@luckyadam
Copy link
Member

awesome!

@zhiqingchen
Copy link
Member

😋

@Chen-jj Chen-jj merged commit 9b4dbc0 into next Feb 24, 2021
@Chen-jj Chen-jj deleted the chore/mini-program branch February 24, 2021 12:26
@nyrf
Copy link

nyrf commented Mar 11, 2021

CustomWrapper 是不是只有对react有用?vue现在没办法做优化?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
V-3 Version - 3.x
Projects
None yet
Development

Successfully merging this pull request may close these issues.

4 participants