前端项目,个人笔记(六)【无限滚动 + pinia进行用户数据持久化 + 拦截器】

10 篇文章 0 订阅

目录

1、无限滚动

2、使用pinia进行用户数据持久化

3、完善个人笔记三中的拦截器

请求拦截器:

响应拦截器:


1、无限滚动

使用elementplus中提供的:

代码:

<div class="body" v-infinite-scroll="load" >
        <!-- 商品列表-->
        <GoodsItem v-for="good in goodList" :good="good" :key="good.id"></GoodsItem>
</div>

load函数实现:

const load = async () => {  
  // 获取下一页的数据
  reqData.value.page++
  console.log(reqData.value.page)
  const res = await getSubCategoryAPI(reqData.value)
  //新加载的数据与老数据进行拼接合并
  goodList.value = [...goodList.value, ...res.result.items]  
}

当所有数据都加载结束后,需要停止加载:

使用:

<div class="body" v-infinite-scroll="load" :infinite-scroll-disabled="disabled">
        <!-- 商品列表-->
        <GoodsItem v-for="good in goodList" :good="good" :key="good.id"></GoodsItem>
</div>

disabled值【true/false】实现:

const disabled = ref(false);
const load = async () => {
  console.log('加载更多数据咯')
  // 获取下一页的数据
  reqData.value.page++
  const res = await getSubCategoryAPI(reqData.value)
  //新加载的数据与老数据进行拼接合并
  goodList.value = [...goodList.value, ...res.result.items]
  // 加载完毕 停止监听
  if (res.result.items.length === 0) {
    disabled.value = true
  }
}

关于无限滚动的其他属性,可自行尝试~


2、使用pinia进行用户数据持久化

        为什么要进行持久化,因为在我们进行登录后,用户数据存在,页面已刷新,用户数据就没了,就会又呈现一个未登录的状态,因此需要用户数据持久化~

  • 安装:npm i pinia-plugin-persistedstate
  • 修改main.js内容:
  • 接口调用处【pinia封装的这里】:

效果:


3、完善个人笔记三中的拦截器

请求拦截器:

// 一般会进行token身份验证等
http.interceptors.request.use(config => {
  const userStore = useUserStore();
    const token = userStore.userInfo.token;
    if(token){
        config.headers.Authorization = `Bearer ${token}`
    }
  return config
}, e => Promise.reject(e))

请求带上token

响应拦截器:

// 一般进行错误的统一提示,token失效的处理等
http.interceptors.response.use(  
  response => {  
    // 对响应数据做点什么  
    return response.data;  
  },  
  error => {  
    if (error.response) {  
      // 请求已发出,服务器也响应了状态码,但状态码不在 2xx 范围内  
      //统一错误提示
        ElMessage({
          type: 'error',
          message: e.response.data.message
      })
      //401token失效处理
      const userStore = useUserStore();
      if(e.response.status === 401){
          userStore.clearUserInfo()
          // 跳到登录页
          router.push('/login')
      }
      return Promise.reject(error.response);  
    }  
      
    // 处理网络错误等  
    return Promise.reject(error.message || 'Error');  
  }  
);

下期见~

  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
要搭建一个基于 Vue 3 的前端项目框架并使用 Pinia 状态管理库,你可以按照以下步骤进行操作: 1. 首先,确保你的开发环境中已经安装了 Node.js 和 npm(或者 yarn)。 2. 使用 Vue CLI 创建一个新的 Vue 3 项目。打开终端并执行以下命令: ``` vue create my-project ``` 3. 进入项目目录: ``` cd my-project ``` 4. 安装 Pinia 和相关依赖: 如果你使用 npm: ``` npm install pinia@next ``` 如果你使用 yarn: ``` yarn add pinia@next ``` 5. 在项目的入口文件 `main.js` 中进行 Pinia 的配置和初始化。在 `main.js` 文件中添加以下代码: ```javascript import { createApp } from 'vue' import { createPinia } from 'pinia' import App from './App.vue' const app = createApp(App) const pinia = createPinia() app.use(pinia) app.mount('#app') ``` 6. 创建一个名为 `store.js` 的文件,用于定义和导出 Pinia 的 Store。 ```javascript import { defineStore } from 'pinia' export const useMyStore = defineStore('myStore', { state: () => ({ // 定义你的状态 }), getters: { // 定义你的 getter 方法 }, actions: { // 定义你的 action 方法 }, }) ``` 7. 在组件中使用 Pinia 的状态管理。 ```vue <template> <div> <p>{{ $store.myStore.myState }}</p> <button @click="$store.myStore.myAction()">点击按钮</button> </div> </template> <script> import { defineComponent } from 'vue' import { useMyStore } from './store' export default defineComponent({ setup() { const myStore = useMyStore() return { myStore, } }, }) </script> ``` 这样,你就已经成功搭建了一个 Vue 3 项目使用了 Pinia 进行状态管理。你可以根据自己的需求在 Store 中定义状态、getter 和 action 方法,并在组件中使用 `$store` 来访问和修改状态。 希望对你有帮助!如果还有其他问题,请随时提问。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

龙洋静

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

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

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

打赏作者

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

抵扣说明:

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

余额充值