当前位置: 首页 > 工具软件 > Taro Iconfont > 使用案例 >

taro 缺点_Taro实践和踩坑

常经赋
2023-12-01

Taro实践

从临时接到任务要做一个答题微信小程序,为什么快速上手选用Taro到现在实践了3个小程序,也算是有些经验和总结,在此记录一下

选择原因

基于React语法规范,上手几乎0成本,满足基本开发需求

支持TS,支持ES7/ES8或更新的语法规范

支持CSS预编译器,Sass/Less等

支持Hooks(日常开发几乎不需要redux场景)

支持状态管理,Redux/MobX

一套代码多端运行,开发成本低

Taro UI基于Taro开发的UI组件

支持多端wechat小程序 、alipay小程序、tt小程序、H5

组件丰富,API、文档友好

开发准备

# >=8.0.0

$ yarn global add @tarojs/cli

$ taro init myApp

$ yarn

编译配置

alias

// config/index

alias: {

"@/components": "src/components",

"@/utils": "src/utils",

"@/styles": "src/styles",

"@/apis": "src/apis",

"@/store": "src/store",

"@/images": "src/assets/images"

}

多端调试

// config/index

outputRoot: `dist/${process.env.TARO_ENV}`

Taro-UI

// config/index

h5: {

esnextModules: ['taro-ui']

}

CSS Module

// 小程序

mini: {

postcss: {

// css modules 功能开关与相关配置

cssModules: {

enable: true, // 默认为 false,如需使用 css modules 功能,则设为 true

config: {

namingPattern: 'module', // 转换模式,取值为 global/module,下文详细说明

generateScopedName: '[name]__[local]___[hash:base64:5]'

}

}

}

}

// h5

h5: {

postcss: {

// css modules 功能开关与相关配置

cssModules: {

enable: true, // 默认为 false,如需使用 css modules 功能,则设为 true

config: {

namingPattern: 'module', // 转换模式,取值为 global/module,下文详细说明

generateScopedName: '[name]__[local]___[hash:base64:5]'

}

}

}

}

// import styles from './style.scss'

样式

设计稿及尺寸单位

默认750px为设计稿标准,可在config/index

weapp px → \rightarrow→ rpx

h5 px → \rightarrow→ rem

覆盖主题

// custom-variables.scss

/* 改变主题变量,具体变量名可查看 taro-ui/dist/style/variables/default.scss 文件 */

$color-brand: #6190E8;

/* 引入 Taro UI 默认样式 */

@import "~taro-ui/dist/style/index.scss";

css预编译器

默认支持sass

styled-component

不支持, 有点难受

字体图标

Iconfont

阿里图标

地址

Iconfont-阿里巴巴矢量图标库

插件

GitHub - iconfont-cli/taro-iconfont-cli

配置

将icon 添加到仓库

获取Symbol链接

更新iconfont.json

{

"symbol_url": "//at.alicdn.com/t/font_1707845_k4b717hruv.js", // Symbol url

"save_dir": "./src/components/iconfont",

"use_typescript": false,

"platforms": "*",

"use_rpx": true,

"trim_icon_prefix": "icon",

"default_icon_size": 18,

"component_name": "IconFont"

}

// npx iconfont-taro

// 更新 @/component/iconfont

使用

pages

import Taro from "@tarojs/taro"

import IconFont from ""@/components/iconfont"

const Check = () => {

return (

)

}

export default Check;

.icon {

&::before {

font-family: "iconfont";

content: "\e687";

display: inline-block;

padding-right: 3px;

vertical-align: middle;

font-weight: 900;

}

}

AtIcon

Taro UI | Icon

踩坑

SPA页面间样式互相影响,采用CSS Module

获取小程序原生作用域this.$scope,使用命名函数或者class, 不能使用箭头函数

父组件向子组件传递函数,函数名以on开头

Taro.navigateBack无法传参

场景

通用平面图拾取页面,拾取成功将数据返回上个页面

解决方案:

使用getCurrentPages // this page

const pages = Taro.getCurrentPages()

const pre = pages[pages.length - 2]

pre.setData(myData)

// pre page

// useDidShow

const page = Taro.getCurrentPages().pop()

console.log(page.data)

维护一个全局变量,如存在Redux

Object.fromEntries支持不完善

转wechat微信小程序

获取坐标,转换为百度坐标系BD09,wx默认支持WGS84, 支持GCJ02

GitHub - hujiulong/gcoord: 地理坐标系转换工具,支持WGS84/GCJ02/BD09等常用坐标系互转

根据单位名称、地址、坐标实现地图导航

使用微信小程序第三方插件腾讯位置服务路线规划

注册:小程序管理后台 → \rightarrow→ 设置 → \rightarrow→ 第三方设置 → \rightarrow→ 插件管理 → \rightarrow→ 添加插件 → \rightarrow→ 腾讯位置服务路线规划

申请腾讯位置服务申请的KEY

注册:src/app.tsx config = {

permission: {

'scope.userLocation': {

desc: '你的位置信息将用于创建单位的位置采集'

}

},

plugins: {

routePlan: {

version: "1.0.5",

provider: "wx50b5593e81dd937a" // 腾讯位置服务路线规划appid

}

},

}

使用 Taro.requirePlugin('routePlan');

const key = KEY; //使用在腾讯位置服务申请的key

const referer = MINI NAME; //调用插件的app的名称

const endPoint = JSON.stringify({ //终点

name,

longitude,

latitude,

});

Taro.navigateTo({

url: 'plugin://routePlan/index?key=' + key + '&referer=' + referer + '&endPoint=' + endPoint

});

能实现功能:步行、公交、驾车路径规划

缺点:不能进行导航

使用wx.openLocation拉起内置地图,点击地图导航按钮,拉起第三方地图软件

图片默认没有长宽锁定, 要使用widthFix

转H5

多端开发不要使用& > view {} & > image {} & > text {}

突然接到将微信小程序转h5, 然后就炸了

没想到什么好方案,用的全局替换

& > view {} → \rightarrow→ & > view, & > div {}

& > image {} → \rightarrow→ & > image, & > img {}

& > text {} → \rightarrow→ & > text, & > span {}

默认没有头部导航

转alipay支付宝小程序

获取元素高度

onst query = Taro.createSelectorQuery();

query.select('.conatiner')

.boundingClientRect(function (rect) {

setbase({ img: e.detail, container: rect }) // wechat

})

.exec(rects => setbase({ img: e.detail, container: rects[0] })); // alipay

图片上传使用Taro.uploadFile无法成功(微信小程序可行)使用my.uploadFile

 类似资料: