【Taro】初识 Taro

news/2024/9/22 13:42:49 标签: 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.niftyadmin.cn/n/5670359.html

相关文章

springMvc的初始配置

基础文件结构(toWeb插件) 1.导入对应依赖 <?xml version"1.0" encoding"UTF-8"?><project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation"ht…

【笔记】1.3 塑性变形

一、塑性变形的方式 DDWs&#xff08;Dislocation-Dipole Walls&#xff0c;位错偶极墙&#xff09;&#xff1a;指由两个位错构成的结构&#xff0c;它们以一种特定的方式排列在一起&#xff0c;形成一个稳定的结构单元。 DTs&#xff08;Dislocation Tangles&#xff0c;位错…

【JavaScript】LeetCode:41-45

文章目录 41 排序链表42 合并k个升序链表43 LRU缓存44 二叉树的中序遍历45 二叉树的最大深度 41 排序链表 递归 归并排序找到链表中心点&#xff0c;从中心点将链表一分为二。奇数个节点找中心点&#xff0c;偶数个节点找中心左边的点作为中心点。快慢指针找中心点&#xff0c…

树及二叉树(选择题)

树 在树中&#xff0c;总结点数为所有结点的度和再加一 5、设一棵度为3的树&#xff0c;其中度为2&#xff0c;1.0的结点数分别为3&#xff0c;1&#xff0c;6。该树中度为3 的结点数为_。 二叉树 设二叉树的所有节点个数为N&#xff0c;度为零的结点&#xff08;叶子结点…

python调用c++动态链接库,环境是VS2022和vscode2023

目录 前言&#xff1a;配置环境&#xff1a;基础夯实&#xff08;对于ctypes的介绍&#xff09;&#xff1a;1. 加载共享库2. 定义函数原型3. 调用函数4. 处理数据结构5. 处理指针6. 错误处理7. 使用 ctypes.util总结 效果展示&#xff1a;操作步骤(保姆级教学)一在VS中创建dll…

【Prometheus】jmx_prometheus_javaagent监控java应用

目录 一、概述 1.1 promethues简介 1.2 JMX Exporter简介 二、监控SparkHistoryServer实现 一、概述 1.1 promethues简介 promethues采集数据的方法很多&#xff0c;常用的是通过各种exporter去主机采集&#xff0c;然后有些程序是没有相关的exporter,所以有些时候会通过脚…

MATLAB入门基础篇

1. 数值计算和符号计算功能 在MATLAB环境中,有超过500种数学、统计、科学及工程方面的函数可使用,函数的标示自然,使得问题和解答像数学式子一般简单明了,让使用者可全力发挥在解题方面,而非浪费在电脑操作上. 2.图形功能 利用MATLAB的高级图形命令可以轻而易举地绘…

CleanClip --- 为Mac用户打造的智能剪贴板管理利器

CleanClip是一款专为Mac用户设计的强大剪贴板管理工具&#xff0c;旨在提升用户的工作效率和数据管理体验。它通过智能化的剪贴板内容管理&#xff0c;实现了Mac系统与用户操作之间的无缝衔接。CleanClip支持多种连接方式&#xff0c;包括系统级的快捷操作和自定义快捷键&#…