【Taro】初识 Taro

笔记来源:编程导航。

概述

Taro 官方文档:https://taro-docs.jd.com/docs/ (跨端开发框架)

Taro 官方框架兼容的组件库:

  • taro-ui:https://taro-ui.jd.com/#/ (最推荐,兼容性最好)
  • nut-ui

下面的讲解是以 react + ts + taro + taro-ui 为主要技术。

基本页面开发

app.config.ts

export default defineAppConfig({// 路由pages: ["pages/index/index","pages/pub/index","pages/user/index"],// 页面属性window: {backgroundTextStyle: "light",navigationBarBackgroundColor: "#fff",navigationBarTitleText: "周家庄智慧旅游",navigationBarTextStyle: "black",},// 底部导航栏tabBar: {color: "#333",backgroundColor: "#fff",borderStyle: "white",list: [{pagePath: "pages/index/index",text: "首页",iconPath: "./assets/tabbar/tab_index.png",selectedIconPath: "./assets/tabbar/tab_index_seled.png"},{pagePath: "pages/pub/index",text: "功能",iconPath: "./assets/tabbar/tab_pub.png",selectedIconPath: "./assets/tabbar/tab_pub_seled.png"},{pagePath: "pages/user/index",text: "我的",iconPath: "./assets/tabbar/tab_user.png",selectedIconPath: "./assets/tabbar/tab_user_seled.png"}]}
});

注:全局修改主题色可以:

app.scss 中全局修改按钮主题色:

.at-button--primary {background: #88619a !important;border-color: #88619a !important;
}

普通页面路由遵循约定式路由,

在这里插入图片描述

View 相当于 html 中的 div。

index.config.ts 里面存放该页面的一些配置:

export default definePageConfig({navigationBarTitleText: '用户页'
})

页面见数据传递

方法 1:url params

https://taro-docs.jd.com/docs/apis/route/navigateTo

比如:result?answerList=[A,B,C]

方法 2:全局状态

https://taro-docs.jd.com/docs/context#contextprovider

方法 3:本地数据存储(推荐,较为简单)

https://taro-docs.jd.com/docs/apis/storage/setStorageSync

小程序特有的奇怪bug,不生效的时候记得清理缓存。

网络请求

小程序中无法直接使用主流的 axios。我们可以使用适配器:https://github.com/bigmeow/taro-platform/tree/master/packages/axios-taro-adapter

此外,还可以增加一些额外配置,比如拦截器等。

登录

理论上用户打开小程序就可以自动登录,不需要自己点按钮,只不过获取不到昵称和头像罢了。

以前我做小程序(23 年前)之所以要点按钮才能登录是为了获取用户头像信息,那会儿能获取到,现在获取不到了,直接前端调用 wx.login 就可以直接拿到 code,然后将 code 给后端,让后端从微信服务器获取 openId 即可。

所有 wx 小程序的原生函数在 Taro 几乎都有对应的接口,比如 Taro.login == wx.login。

https://docs.taro.zone/docs/apis/open-api/login/

这里面的 code 相当于 token,主要用作身份校验。

// app.ts
import Taro, { useLaunch } from "@tarojs/taro";
import { PropsWithChildren } from "react";
import "taro-ui/dist/style/index.scss"; // 引入组件样式 - 方式一
import "./app.scss";function App({ children }: PropsWithChildren) {useLaunch(async () => {const res = await Taro.login();console.log(res);// todo 拿到 res.code 后,调用后端登录});return children;
}export default App;

需要后端支持,后端开发小程序登录可以使用 WxJava 库。

怎么保证小程序全局自动登录?

1)首次进入 app 时,在 app.ts 中触发自动登录

2)每次操作出现未登录时,立刻调用登录函数,作为一种兜底

存在的问题:用户首次进入的页面需要获取到用户信息,但是自动登录是异步的,可能在登录完成前,就已经请求了用户信息,结果后端响应未登录,怎么办呢?

理想情况下是自动登录后,才进行其他的请求和操作,防止出现 “未登录” 的报错,需要用户刷新重试。

答案:使用全局状态管理,在页面内用 useEffect 监听登录状态的变化,如果已登录,再获取用户信息。

其他兜底策略:显示登录按钮

其他注意事项:在需要获取用户信息的位置,建议调用 getLoginUser 函数获取到最新的用户信息(而不是前端的缓存),适用于积分动态变化的场景。

怎么存储 session 和携带 cookie 信息?

相比于 web 开发,小程序除了可能要维护已登录用户信息外,还要自己额外维护 cookie。

可以通过全局请求响应拦截器,登录响应后自动设置 Cookie 到本地存储、发请求时自动取出 Cookie 并设置到请求头中。

示例代码如下:

// 请求拦截器
const requestInterceptor = (config: InternalAxiosRequestConfig) => {config.headers.cookie = Taro.getStorageSync(COOKIE_KEY);return config;
};// 响应拦截器
const responseInterceptor = (response: AxiosResponse) => {// 自动种上 Cookie(和业务逻辑无关,弥补小程序没有 Cookie 管理机制)const cookie = response.headers["Set-Cookie"];if (cookie) {Taro.setStorageSync(COOKIE_KEY, cookie);}...
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/430013.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【渗透测试】-vulnhub源码框架漏洞-Os-hackNos-1

vulnhub源码框架漏洞中的CVE-2018-7600-Drupal 7.57 文章目录  前言 1.靶场搭建: 2.信息搜集: 主机探测: 端口扫描: 目录扫描: 3.分析: 4.步骤: 1.下载CVE-2018-7600的exp 2.执行exp: 3.写入木…

电玩店ps5倒计时软件试用版下载 佳易王电玩计时计费管理系统操作教程

一、前言 电玩店ps5倒计时软件试用版下载 佳易王电玩计时计费管理系统操作教程 佳易王电玩店计时计费软件,有两款,其中一款可显示倒计时剩余分钟数,另外一款是显示用了多长时间,都可以设置定时语音提醒。 二、显示倒计时软件图文…

【超详细】基于YOLOv8训练无人机视角Visdrone2019数据集

主要内容如下: 1、Visdrone2019数据集介绍 2、下载、制作YOLO格式训练集 3、模型训练及预测 4、Onnxruntime推理 运行环境:Python3.8(要求>3.8),torch1.12.0cu113(要求>1.8)&#xff0c…

策略模式与工厂模式的区别

《策略模式与工厂模式的区别》 策略模式(Strategy Pattern) 和 工厂模式(Factory Pattern) 都是常见的设计模式,虽然它们在设计目标上有一些相似之处,如解耦代码、增强扩展性,但它们的应用场景和…

基于单片机的智能小车的开发与设计

摘要:本文论述了基于 STC89C52 单片机的智能小车的开发与设计过程。该设计采用单片机、电机驱动及光电循迹等技术,保证小车在无人管理状态下,能按照预先设定的线路实现自动循迹功能。在电路结构设计中力求方便,可操作,…

文件操作

文件的由来:在程序中,之前每一个程序都是需要运行然后输入数据,当程序结束时输入的数据也随之消散,为了下一次运行时不再输入数据就有文件的由来,使用文件我们可以将数据直接存放在电脑的硬盘上,做到了数据…

软件著作权登记所需要的材料

软件著作权登记所需材料全面解析 在当今数字化时代,软件著作权作为保护软件开发者智力劳动成果的重要法律手段,其登记过程显得尤为重要。 一、软件著作权登记申请表 首先,软件著作权登记需要提交的最基本材料是《软件著作权登记申请表》。这份…

照片写真记录摄影作品记录网站源码

完美适应iPad,平板,手机竖屏不支持lazy,横屏可以,但建议使用平板查看效果, 有服务器直接上传解压使用,环境nginxphp, 没有服务器也没关系,可以直接使用html

前端项目代码开发规范及工具配置

在项目开发中,良好的代码编写规范是项目组成的重要元素。本文将详细介绍在项目开发中如何集成相应的代码规范插件及使用方法。 项目规范及工具 集成 EditorConfig集成 Prettier1. 安装 Prettier2. 创建 Prettier 配置文件3. 配置 .prettierrc4. 使用 Prettier 集成 …

计算机毕业设计 基于Python的食品销售数据分析系统 SpringBoot+Vue 前后端分离 附源码 讲解 文档

🍊作者:计算机编程-吉哥 🍊简介:专业从事JavaWeb程序开发,微信小程序开发,定制化项目、 源码、代码讲解、文档撰写、ppt制作。做自己喜欢的事,生活就是快乐的。 🍊心愿:点…

LeetCode Hot100 C++ 哈希 1.两数之和

LeetCode Hot100 C 1.两数之和 给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个整数,并返回它们的数组下标。 你可以假设每种输入只会对应一个答案,并且你不能使用两次相同的元素。 你可以按…

基于STM32的智能花盆控制系统设计-设计说明书设计

设计摘要: 随着人们对室内绿植的热爱与需求日益增长,智能花盆控制系统作为一种新兴的智能化管理方式,受到了广泛关注。本文旨在设计一种基于STM32的智能花盆控制系统,以实现对花盆的自动浇水、温湿度监测和光照控制等功能。 在硬…

Android轻量级RTSP服务使用场景分析和设计探讨

技术背景 好多开发者,对我们Android平台轻量级RTSP服务模块有些陌生,不知道这个模块具体适用于怎样的场景,有什么优缺点,实际上,我们的Android平台轻量级RTSP服务模块更适用于内网环境下、对并发要求不高的场景&#…

基于对数变换的图像美白增强,Matlab实现

博主简介:matlab图像处理(QQ:3249726188) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 本次案例是基于对数变换的图像美白增强,用matlab实现。 一、案例背景和算法介绍 这次案例是美白算法&…

大数据可视化-三元图

三元图是一种用于表示三种变量之间关系的可视化工具,常用于化学、材料科学和地质学等领域。它的特点是将三个变量的比例关系在一个等边三角形中展示,使得每个点的位置代表三个变量的相对比例。 1. 结构 三个角分别表示三个变量的最大值(通常…

爬虫 ----hook

目录 定义: 了解什么是hook? 举例 hook XHR请求 XMLHttpRequest 案例地址: Interceptors-拦截器 HOOK cookie操作 cookie 示范 常见的hook代码总结 1.Hook Cookie 2.Hook Header 3.Hook URL 4.Hook JSON.stringify 5.Hook JSON.parse 6.Ho…

蓝桥杯嵌入式的学习总结

一. 前言 嵌入式竞赛实训平台(CT117E-M4) 是北京国信长天科技有限公司设计,生产的一款 “ 蓝桥杯全国软件与信息技术专业人才大赛-嵌入式设计与开发科目 “ 专用竞赛平台,平台以STM32G431RBT6为主控芯片,预留扩展板接口,可为用户提…

conda环境下module ‘numba.types‘ has no attribute ‘Macro‘问题解决

1 问题描述 conda环境下运行数据处理&#xff0c;报出如下错误&#xff1a; Traceback (most recent call last):File "train_preprocess.py", line 13, in <module>import audioFile "/opt/service/lipsync/audio.py", line 1, in <module>…

橙子质量检测系统源码分享

橙子质量检测检测系统源码分享 [一条龙教学YOLOV8标注好的数据集一键训练_70全套改进创新点发刊_Web前端展示] 1.研究背景与意义 项目参考AAAI Association for the Advancement of Artificial Intelligence 项目来源AACV Association for the Advancement of Computer Vis…

基于yolov5滑块识别破解(一)

由于内容较长&#xff0c;将分为两个部分来说明&#xff0c;本文讲解yolov5的部署与训练。 1.YOLOv5部署 云端部署&#xff08;训练&#xff09; 服务器创建 如果自己的显卡算力不是很好的&#xff0c;或者是核显电脑&#xff0c;可以租用算力&#xff0c;价格还行一块钱左右就…