vue3 单一状态管理

1,问题

有一个全局错误弹窗,当项目中有接口报错时,会显示错误信息。

思路:在 axios 的响应拦截器中,满足条件后打开错误弹窗。

问题:如何在 js 文件(axios)中,向 vue 文件(错误弹窗)传参,而且是响应式的?

2,单一状态管理

vue -状态管理

一个比较容器想到的方式——状态管理器 Vuex 或 Pinia。借鉴这个思路,可以通过自定义一个全局单例来实现。

目录

-- api
  -- index.js
-- component
  -- dialogError
    -- index.vue
    -- useError.js

实现

1,dialogError/useError.js 实现单例。

import { ref } from 'vue'

// error 专属单例
const errorRef = ref(null)

export default errorRef

2,api/index.js 单例赋值。

import axios from 'axios'
import errorRef from '@/components/dialogError/useError'

axios.interceptors.request.use(
  // ...
)

axios.interceptors.response.use(
  function (response) {
    if (response.data.responseCode === '00000') {
      return response.data
    // 接口报错  
    } else {
      if (location.pathname !== '/error.html') {
        // 防止因为多个接口,多次执行
        if (!errorRef.value) {
          errorRef.value = response.data
        }
      } else {
        return response.data
      }
    }
  },
  function (error) {
    return Promise.reject(error)
  }
)

export default axios

3,dialogError/index.vue 单例使用。

<template>
  <Dialog :show="visible">
    <div>({{ errorRef }})</div>
    <div @click="handleClose">关闭</div>
  </Dialog>
</template>

<script setup>
import { ref, watch } from 'vue'
import Dialog from '../Dialog.vue'
import errorRef from './useError'

const visible = ref(false)
watch(
  () => errorRef.value,
  (nv) => {
    visible.value = !!nv
  }
)

const handleClose = () => {
  visible.value = false
}
</script>

以上。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

下雪天的夏风

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值