微信小程序(黑马TS+uniapp)--要点总结

总体逻辑

前后端调接口:按请求方法分 GET/POST/PUT/PATCH/DELETE 5 大类;

小程序原生内置:路由、网络、存储、权限、支付、分享等系统 API;

项目代码层面:分基础请求封装、各业务模块 API、TS 类型定义三层。

多端看6-7部分的笔记(项目开发以及后面)--实现多平台业务展示

小程序 /uni-app 内置原生 API(uni.xxx/wx.xxx)

1. 网络 API

uni.request:普通 http 请求

uni.uploadFile:上传文件

uni.downloadFile:下载文件

2. 本地存储 API

uni.setStorageSync/uni.getStorageSync:本地缓存(Pinia 持久化底层就是它)

3. 页面路由 API

uni.navigateTo、uni.switchTab、uni.reLaunch、uni.navigateBack(对应 button open-type)

4. 弹窗交互 API

uni.showToast、uni.showModal、uni.showLoading

5. 设备 / 权限 API

uni.getPhoneNumber、uni.getUserProfile、uni.chooseImage、uni.getLocation

6. 分享、客服、支付 API

uni.share、打开客服会话、uni.requestPayment 支付

页面常用功能

自定义导航栏,轮播图,SKU弹窗,骨架屏--微信小程序(黑马)4-5

表单组件

适配屏幕

javascript 复制代码
<script setup lang="ts">
// 获取屏幕边界到安全区域距离
const { safeAreaInsets } = uni.getSystemInfoSync()

//定义props
const props = defineProps<{ orderState: number }>()
</script>)

二次弹窗uni.showModal

选择图片uni.chooseMedia

uni.uploadFile---上传文件

uni-swipe-action--常用于删除

javascript 复制代码
<uni-swipe-action> 【外层容器,统一管理所有侧滑项】
  <uni-swipe-action-item> 【单条列表侧滑容器】
    <!-- 中间:列表正常展示内容 -->
    <view>商品/地址/消息内容</view>

    <!-- 右侧侧滑按钮(左滑出来) -->
    <template #right>
      自定义按钮
    </template>

    <!-- 左侧侧滑按钮(右滑出来,可选) -->
    <template #left>
      自定义按钮
    </template>
  </uni-swipe-action-item>
</uni-swipe-action>

初始化

onload 和 onshow onMouted

组件常用功能

button--常用属性 opentype

getPhoneNumber:手机号一键登录

share:分享功能

switchTab:切换底部 tab

navigate:普通内页跳转

back:返回上一页

contact:客服聊天

reLaunch:登录后清空栈跳转首页

javascript 复制代码
<button open-type="getPhoneNumber" bindgetphonenumber="getPhone">获取手机号登录</button>

跳转页面-navigator/button

navigator组件 加url

javascript 复制代码
<!-- 默认open-type="navigate" -->
<navigator url="/pages/detail/detail?id=100">
  进入详情页
</navigator>

button的open-type属性:

navigateTo:存页面栈,可返回,不能跳 tab

redirectTo:关闭当前页,跳新页,无返回

switchTab:只切底部 tab,清非 tab 页面

reLaunch:全关页面,重启到目标页

navigateBack:原路返回

input加v-model实现双向绑定

常用属性:

@tap 点击后触发函数

v-if 和v-else表示是否呈现这部分

易错易漏:

引入类型用type

defineProps 只能在 <script setup> 中使用

状态orderstate的修改--影响每笔订单

const XX=ref()--让基础数据具备响应式(最常用)

使得后续的result都是对应的数据;http返回promise所以要async await

javascript 复制代码
const age = ref<number>(18)

// 修改必须 .value
nickname.value = '小明'
age.value = 20

接口返回的数据格式

带参数的接口

defineProps用于接收父组件给的数据

检查

可以通过 检查-network 查看是否发送成功请求

store(共享数据-常用)

数据全局共享 :用户信息、登录态、token、购物车、全局配置等,任何页面直接读取,不用父子组件一层层 props 传递。

统一修改数据 所有数据变更逻辑封装在 store 的 actions,一处修改,全页面自动同步更新。

持久化存储 搭配持久化插件,刷新 / 重启小程序后数据不丢失(登录状态、用户信息缓存)。

TypeScript 复制代码
    import { defineStore } from 'pinia'
// 导入你之前定义的用户详情类型
import type { ProfileDetail } from '@/types/profile'

// 定义仓库ID,全局唯一
export const useUserStore = defineStore('user', {
  // state:存放全局状态(响应式数据)
  state: () => ({
    token: '' as string,
    // 用户详情,复用你之前的TS类型
    profile: null as ProfileDetail | null
  }),

  // getters:计算属性,派生数据(类似 computed)
  getters: {
    // 判断是否登录
    isLogin: (state) => !!state.token,
    // 获取用户昵称
    nickname: (state) => state.profile?.nickname || ''
  },

  // actions:修改state的方法(类似 methods,支持同步/异步)
  actions: {
    // 1. 保存登录token
    setToken(token: string) {
      this.token = token
    },

    // 2. 保存用户个人信息(对应你修改资料接口)
    setProfile(data: ProfileDetail) {
      this.profile = data
    },

    // 3. 更新部分用户资料(搭配你截图的 Pick 类型)
    updateProfile(params: Pick<ProfileDetail, 'nickname' | 'gender'>) {
      if (!this.profile) return
      // 合并更新字段
      this.profile = { ...this.profile, ...params }
    },

    // 4. 退出登录,清空所有用户数据
    logout() {
      this.token = ''
      this.profile = null
    }
  },

  // 持久化配置(uni-app/小程序必开,关闭页面数据不丢失)
  persist: true
})
javascript 复制代码
<script setup lang="ts">
import { useUserStore } from '@/stores/user'
// 实例化仓库
const userStore = useUserStore()

// 读取全局数据
console.log(userStore.token)
console.log(userStore.nickname) // getter

// 修改数据,调用actions
const editNickname = () => {
  userStore.updateProfile({ nickname: '新名字', gender: 1 })
}

// 退出登录
const loginOut = () => {
  userStore.logout()
}
</script>

<template>
  <view>{{ userStore.profile?.nickname }}</view>
  <button @click="editNickname">修改昵称</button>
</template>

Pick作用(偶尔)

Pick<T, K> 是 TS 官方内置泛型工具类型: 作用:从类型 T 中挑选指定的一组键 K,生成一个全新类型

把 Pick 得到的 4 字段类型,合并 后面新增的 3 个可选地址编码字段,最终 ProfileParams 完整包含: 必填:nickname、gender、birthday、profession 可选:provinceCode、cityCode、countyCode