pinia:状态管理工具,相比于Vuex,pinia上手简单,能够更好的检测异步数据的变化,
和Vue3+ts结合使用,一个字:爽

如何使用Pinia

第一步:安装pinia,使用如下命令

  1. npm i pinia

第二步
在src文件夹下新建stores文件夹,此文件夹用来存放数据的状态、公共数据,具体实现如下

  1. // 在stores文件中新建一个index.ts文件,写入一下代码
  2. // 创建大store
  3. // 导入pinia
  4. import { createPinia } from 'pinia'
  5. const pinia = createPinia()
  6. // 暴露出去
  7. export default pinia
  8. // 在main.ts中进行注册使用
  9. import pinia from '@/stores'
  10. app.use(pinia)

创建小store,例如用户信息user.ts

  1. // 导入创建小store的包
  2. import {definePinia} from 'pinia'
  3. // 定义一个store
  4. const useUserStore = definePinia('User',{
  5. state:()={
  6. return {}
  7. },
  8. action:{
  9. // 进行异步操作
  10. // 如发请求、拿数据
  11. },
  12. getter:{
  13. // 类似于计算属性,可以对获取到的数据进行处理
  14. }
  15. })
  16. // 暴露
  17. export default useUserStore
  18. // 在组件中使用
  19. // 比如在login.vue中使用store中的数据
  20. import useUserStore from '@/stores/user'
  21. const userStore = useUserStore()
  22. // 调用store中的方法
  23. userStore.userLogin()

总结:在vue中,任何一个第三方工具的使用,都可以理解为以下步骤

安装—>定义 —> 注册 —> 使用,包括Vuex状态管理工具的使用、路由的使用

Vuex的使用

同pinia一样,也是一个状态管理工具,和Vue2结合使用,一个字:香

  1. // 安装Vuex
  2. npm i vuex
  3. // // 在stores文件中新建一个index.ts文件,写入一下代码
  4. // 总的store
  5. import { createApp } from 'vue'
  6. import { createStore } from 'vuex'
  7. import user from './modules/user'
  8. Vue.use(Vuex)
  9. const store = Vuex.Stroe({
  10. modules:{
  11. // 其他分store
  12. user
  13. }
  14. })
  15. // 其他小store
  16. const user = {
  17. namespace:true,//开启命名空间
  18. state:{
  19. // 存放状态数据
  20. categoryList: []
  21. },
  22. mutations:{
  23. // 直接更新数据
  24. saveCategoryList(state, params) {
  25. // 可以对数据进行截取
  26. state.categoryList = params.slice(0, 15)
  27. }
  28. },
  29. actions:{
  30. // 异步更新数据
  31. async getCategoryList(context) {
  32. // 调用 API 获取数据
  33. const res = await reqCategoryList()
  34. // 判断后端返回的业务状态码
  35. // 业务状态码:是后端返回的标识,用来标识数据是否返回正常
  36. // 如果返回是的 200,说明数据返回正常
  37. // 如果返回不是 200,说明数据异常
  38. if (res.code === 200) {
  39. context.commit('saveCategoryList', res.data)
  40. }
  41. },
  42. },
  43. getter:{
  44. // 类似于计算属性
  45. }
  46. }
  47. // 导出store
  48. export default user
  49. // 注意:此模块中的namespace可以研究一波,不要太深入
  50. // 在组件中使用
  51. mounted(){
  52. this.$store.dispatch('home/getSwiperList')
  53. }
  54. computed: {
  55. // 辅助函数一共有4个,为了方便操作Vuex中的数据而产生的
  56. ...mapState('home', ['swiperList']) //借助附注函数
  57. }