电商商城定制开发Nuxt3请求封装数据获取详解、useState和useCookie的使用

一、电商商城定制开发与传统方式不同,Nuxt3电商商城定制开发内置了四种请求方式

1、useFetch

2、useLazyFetch

3、useAsyncData

4、useLazyAsyncData

注意:1、useFetch 和 useLazyFetch,useAsyncData和useLazyAsyncData 区别,服务端渲染的时候,这两个没差别,在客户端渲染的时候,useLazyFetch 相当于请求是数据是 suspense 的,而 useLazyFetch 一定要全部请求完毕,才进行路由内容的显示。2、我们更多使用的是useAsyncData和useFetch

二、为了方便我管理,来封装一个 useFetch 请求,新建utils/request.ts

  1. import { _AsyncData } from 'nuxt3/dist/app/composables/asyncData'
  2. //import baseUrl from './baseUrl'
  3. import { ElMessage } from 'element-plus'
  4. let baseUrl = ''
  5. // 指定后端返回的基本数据类型
  6. export interface ResponseConfig {
  7. code: number,
  8. status: number,
  9. data: any,
  10. msg: string
  11. }
  12. export interface ValueConfig {
  13. value: any,
  14. }
  15. const fetch = (url: string, options?: any): Promise<any> => {
  16. const reqUrl = baseUrl + url
  17. return new Promise((resolve, reject) => {
  18. useFetch(reqUrl, { ...options }).then(({ data, error }: _AsyncData) => {
  19. if (error.value) {
  20. reject(error.value)
  21. return
  22. }
  23. const value = data.value
  24. if (!value) {
  25. // 这里处理错误回调
  26. // reject(value)
  27. // $router.replace('/reject/' + value.status)
  28. }else if(value.code == 102){
  29. ElMessage({
  30. message: value.msg,
  31. type: 'error',
  32. })
  33. } else {
  34. resolve(ref(value))
  35. }
  36. }).catch((err: any) => {
  37. reject(err)
  38. })
  39. })
  40. }
  41. export default new class Http {
  42. get(url: string, params?: any): Promise<any> {
  43. return fetch(url, { method: 'get', params })
  44. }
  45. post(url: string, params?: any): Promise<any> {
  46. return fetch(url, { method: 'post', params })
  47. }
  48. put(url: string, body?: any): Promise<any> {
  49. return fetch(url, { method: 'put', body })
  50. }
  51. delete(url: string, body?: any): Promise<any> {
  52. return fetch(url, { method: 'delete', body })
  53. }
  54. }

三、新建一个API管理文件,utils/api.ts

  1. import Http from '@/utils/http'
  2. export const config1 = (params?) => {
  3. return Http.get('接口地址', params)
  4. }
  5. export const config2 = (params?) => {
  6. return Http.post('接口地址', params)
  7. }

四、在页面中使用,例如:

  1. <template>
  2. <h3>你好</h3>
  3. </template>
  4. <script setup lang="ts">
  5. //按需引入
  6. import { ref, reactive, onMounted, getCurrentInstance } from 'vue'
  7. //引入 api中对应的接口请求
  8. import {config1,config2} from "../utils/api"
  9. interface ArrayList {
  10. banner: object
  11. }
  12. const state:ArrayList = reactive({
  13. banner:[],
  14. })
  15. //config1
  16. config1('').then(res => {
  17. state.banner = res.value.data.listlunbos
  18. }).catch((err)=>{
  19. console.log(err)
  20. })
  21. //config2
  22. const data = {}
  23. config2(data).then((res) => {
  24. if(res.value.code == 200){
  25. state.cooporationTost = false
  26. ElMessage({
  27. message: '我们会第一时间与您联系',
  28. type: 'success',
  29. })
  30. }else{
  31. ElMessage({
  32. message: res.value.data.message,
  33. type: 'success',
  34. })
  35. }
  36. }).catch((err) => {
  37. console.log(err)
  38. })
  39. </script>
  40. <style scoped>
  41. </style>

五、和useCookie的使用

在Nuxt2中,如果我们要使用cookie,需要引入插件,在Nuxt3中,也不再集成Vuex,可以利用Nuxt3的composables自动导入属性,把它们定义在composables目录中,这样他们将成为全局类型安全的状态。

1、useState使用

首先我们需要在项目的根目录新建composables文件夹,然后创建状态管理文件如:composables/state.ts.

  1. //首先引入useState、useCookie
  2. import { useState, useCookie } from "nuxt/app";
  3. export const useInfo = () => useState("userData",() => {
  4. return {
  5. id: 1,
  6. name: '用户1'
  7. }
  8. })
  9. // token
  10. export const useToken = () => useState("token",()=> "aaadd232cfdfdf23fdf")

 如何获取修改 state 值

  1. <template>
  2. <h3>你好</h3>
  3. </template>
  4. <script setup lang="ts">
  5. const userData = useInfo();
  6. const token = useToken();
  7. </script>
  8. <style scoped>
  9. </style>

2、useCookie使用

  1. <template>
  2. <h3>你好</h3>
  3. </template>
  4. <script setup lang="ts">
  5. // 获取 Cookie
  6. const Cookies = useCookie('token')
  7. // 设置 Cookie
  8. Cookies.value = Cookies.value || ''
  9. // 删除 Cookie
  10. cookie.value = undefined || null
  11. </script>
  12. <style scoped>
  13. </style>
网站建设定制开发 软件系统开发定制 定制软件开发 软件开发定制 定制app开发 app开发定制 app开发定制公司 电商商城定制开发 定制小程序开发 定制开发小程序 客户管理系统开发定制 定制网站 定制开发 crm开发定制 开发公司 小程序开发定制 定制软件 收款定制开发 企业网站定制开发 定制化开发 android系统定制开发 定制小程序开发费用 定制设计 专注app软件定制开发 软件开发定制定制 知名网站建设定制 软件定制开发供应商 应用系统定制开发 软件系统定制开发 企业管理系统定制开发 系统定制开发