Vue3项目起步该做的二三事

简介: Vue3项目起步该做的二三事

1.添加配置文件


路径提示配置:当我们使用路径别名@的时候可以提示路径。

方法:新建jsconfig.json 文件,将下面的内容复制进去

{
  "compilerOptions": {
    "baseUrl": ".",
    "paths": {
      "@/*": ["./src/*"],
    }
  },
  "exclude": ["node_modules", "dist"]
}

eslint忽略配置:eslint在做风格检查的时候忽略 dist 和 vender 不去检查。

方法:新建   .eslintignore文件,将下面的内容复制进去

1. /dist
2. /src/vender

2. vuex-持久化插件


业务场景:

多用于保存用户token

什么是持久化:让数据保存的时间长些

将数据保存到本地存储或者是cookie中,这样页面刷新就不会丢失了。

步骤:

01 安装插件

npm i vuex-persistedstate

02 使用 store/index.js中

import { createStore } from 'vuex'
+ import createPersistedstate from 'vuex-persistedstate'
import user from './modules/user'
import cart from './modules/cart'
import cart from './modules/category'
export default createStore({
  modules: {
    user,
    cart,
    category
  },
+  plugins: [
+    createPersistedstate({
+      key: 'erabbit-client-pc-store',
+      paths: ['user', 'cart']
+    })
+  ]
})

注意点:

  • 默认是存储在localStorage中
  • key是存储数据的键名
  • paths是存储state中的那些数据,如果是模块下具体的数据需要加上模块名称,如user.token
  • 修改state后触发才可以看到本地存储数据的的变化。

3. 封装axios-提供请求函数


目标:基于axios封装一个请求工具,调用接口时使用

要做的事:安装axios ---> 封装request模块

步骤:

01 安装 axios

npm i axios

02 新建request模块

建立 src/utils/request.js 模块,代码如下

// 1. 创建一个新的axios实例
// 2. 请求拦截器,如果有token进行头部携带
// 3. 响应拦截器:1. 剥离无效数据  2. 处理token失效
// 4. 导出一个函数,调用当前的axsio实例发请求,返回值promise
import axios from 'axios'
export const baseURL = 
const instance = axios.create({
  // axios 的一些配置,baseURL  timeout
  baseURL:'http://pcapi-xiaotuxian-front-devtest.itheima.net',
  timeout: 5000
})
// 请求工具函数
export default (url, method, submitData) => {
  // 负责发请求:请求地址,请求方式,提交的数据
  return instance({
    url,
    method,
    // 1. 如果是get请求  需要使用params来传递submitData   ?a=10&c=10
    // 2. 如果不是get请求  需要使用data来传递submitData   请求体传参
    // [] 设置一个动态的key, 写js表达式,js表达式的执行结果当作KEY
    // method参数:get,Get,GET  转换成小写再来判断
    // 在对象,['params']:submitData ===== params:submitData 这样理解
    [method.toLowerCase() === 'get' ? 'params' : 'data']: submitData
  })
}

4. 封装axios-集中添加token


书接上回,还是封装axios的文件中

// 1. 创建一个新的axios实例
// 2. 请求拦截器,如果有token进行头部携带
// 3. 响应拦截器:1. 剥离无效数据  2. 处理token失效
// 4. 导出一个函数,调用当前的axsio实例发请求,返回值promise
import axios from 'axios'
import store from '@/store'
// 导出基准地址,原因:其他地方不是通过axios发请求的地方用上基准地址
export const baseURL = 'http://pcapi-xiaotuxian-front-devtest.itheima.net/'
const instance = axios.create({
  // axios 的一些配置,baseURL  timeout
  baseURL,
  timeout: 5000
})
// 请求拦截器: 加(注入)token
instance.interceptors.request.use(
  config => {
    console.log('store', store)
    // 如何在.js中获取vuex中的token
    // import store from '@/store'
    const token = store.state.user.profile.token
    if (token) {
      // 设置请求头
      config.headers.Authorization = `Bearer ${token}`
    }
    // if (如果有token) {
    //    就带上
    // }
    return config
  },
  error => {
    // do something with request error
    console.log(error) // for debug
    return Promise.reject(error)
  }
)

5.封装axios-剥离无效数据+集中处理401


目标:

剥离无效数据:对接口返回值又做了封装:外部补充一个data,导致获取数据都需要写res.data

集中处理401:对没有401错误可以方便的集中处理。

代码实现:

import axios from 'axios'
import store from '@/store'
import router from '@/router'
// 导出基准地址,原因:其他地方不是通过axios发请求的地方用上基准地址
export const baseURL = 'http://pcapi-xiaotuxian-front-devtest.itheima.net/'
const instance = axios.create({
  // axios 的一些配置,baseURL  timeout
  baseURL,
  timeout: 5000
})
// 响应拦截器
instance.interceptors.response.use(
  response => response.data, // 请求成功
  error => {
    // console.log('请求出错啦', error)
    // console.dir(error)
    if (error.response.status === 401) {
      console.log('token错误')
      // 1. 清空本地个人信息
      store.commit('user/setUser', {})
      // .vue -- this.$route.fullPath
      //  .js -- router.currentRoute: 是ref数据,要加.value
      // .fullPath: 完整的path(参查询参数的)
      // 2. 跳到登录页
      router.push('/login?return_url=' + encodeURIComponent(router.currentRoute.value.fullPath))
    }
    return Promise.reject(error)
  }
)
// 请求工具函数
export default (url, method, submitData) => {
  // 负责发请求:请求地址,请求方式,提交的数据
  return instance({
    url,
    method,
    // 1. 如果是get请求  需要使用params来传递submitData   ?a=10&c=10
    // 2. 如果不是get请求  需要使用data来传递submitData   请求体传参
    // [] 设置一个动态的key, 写js表达式,js表达式的执行结果当作KEY
    // method参数:get,Get,GET  转换成小写再来判断
    // 在对象,['params']:submitData ===== params:submitData 这样理解
    [method.toLowerCase() === 'get' ? 'params' : 'data']: submitData
  })
}

6. 路由设计


image.png

思路:如何从UI图中分析出路由设计?

  1. 找到页面中变化和不变的部分,将变化的部分设计成次级路由(<router-view/>)
  2. 先做大页面(1级路由),然后再来细分。

7. 安装调试工具


目标:安装针对于vue3的开发调试环境

Dev-tools安装

作为vue框架官方调试工具,dev-tools提供了对于组件关系和数据状态方便的查看和调试功能,现在它也更新到了适配vue3的版本,我们这次的项目使用最新的版本进行预览调试开发

Logger Plugin 安装

当前的调试工具暂时不支持vuex的调试查看,需要我们额外进行log调试,vuex内置了一个logger模块,我们只需要引入并且注册为插件即可。

Logger Plugin 安装

当前的调试工具暂时不支持vuex的调试查看,需要我们额外进行log调试,vuex内置了一个logger模块,我们只需要引入并且注册为插件即可。

+ import { createLogger } from 'vuex'
export default createStore({
  modules: {
    user,
    cart,
    category
  },
  plugins: [
+    createLogger()
  ]
})

8.划分vuex模块


为什么这么做:我们利用vuex保存数据,当数据特别多的时候,就用到modules来按照模块划分,然后注册使用。

步骤:01 创建modules:

举例:src/store 文件夹下新建 modules 文件夹,在 modules 下新建 user.jscart.js

// 用户模块
export default {
  namespaced: true,
  state () {
    return {
      // 用户信息
      profile: {
        id: '',
        avatar: '',
        nickname: '',
        account: '',
        mobile: '',
        token: ''
      }
    }
  },
  mutations: {
    // 修改用户信息,payload就是用户信息对象
    setUser (state, payload) {
      state.profile = payload
    }
  }
}

步骤:02 在store/ index.js中引入

src/store/index.js 中导入

import { createStore } from 'vuex' // vuex 的工厂函数
import user from './modules/user'  // 引入咱们写的模块
import cart from './modules/cart'
import category from './modules/category'
export default createStore({
  modules: {
    user,  // 在这里注册
    cart,
    category
  }
})
相关文章
|
1月前
|
JavaScript 前端开发 安全
Vue 3
Vue 3以组合式API、Proxy响应式系统和全面TypeScript支持,重构前端开发范式。性能优化与生态协同并进,兼顾易用性与工程化,引领Web开发迈向高效、可维护的新纪元。(238字)
472 139
|
26天前
|
缓存 JavaScript 算法
Vue 3性能优化
Vue 3 通过 Proxy 和编译优化提升性能,但仍需遵循最佳实践。合理使用 v-if、key、computed,避免深度监听,利用懒加载与虚拟列表,结合打包优化,方可充分发挥其性能优势。(239字)
187 1
|
6月前
|
缓存 JavaScript PHP
斩获开发者口碑!SnowAdmin:基于 Vue3 的高颜值后台管理系统,3 步极速上手!
SnowAdmin 是一款基于 Vue3/TypeScript/Arco Design 的开源后台管理框架,以“清新优雅、开箱即用”为核心设计理念。提供角色权限精细化管理、多主题与暗黑模式切换、动态路由与页面缓存等功能,支持代码规范自动化校验及丰富组件库。通过模块化设计与前沿技术栈(Vite5/Pinia),显著提升开发效率,适合团队协作与长期维护。项目地址:[GitHub](https://github.com/WANG-Fan0912/SnowAdmin)。
897 5
|
2月前
|
开发工具 iOS开发 MacOS
基于Vite7.1+Vue3+Pinia3+ArcoDesign网页版webos后台模板
最新版研发vite7+vue3.5+pinia3+arco-design仿macos/windows风格网页版OS系统Vite-Vue3-WebOS。
347 11
|
1月前
|
JavaScript 安全
vue3使用ts传参教程
Vue 3结合TypeScript实现组件传参,提升类型安全与开发效率。涵盖Props、Emits、v-model双向绑定及useAttrs透传属性,建议明确声明类型,保障代码质量。
232 0
|
3月前
|
缓存 前端开发 大数据
虚拟列表在Vue3中的具体应用场景有哪些?
虚拟列表在 Vue3 中通过仅渲染可视区域内容,显著提升大数据列表性能,适用于 ERP 表格、聊天界面、社交媒体、阅读器、日历及树形结构等场景,结合 `vue-virtual-scroller` 等工具可实现高效滚动与交互体验。
411 1
|
3月前
|
缓存 JavaScript UED
除了循环引用,Vue3还有哪些常见的性能优化技巧?
除了循环引用,Vue3还有哪些常见的性能优化技巧?
229 0
|
4月前
|
JavaScript
vue3循环引用自已实现
当渲染大量数据列表时,使用虚拟列表只渲染可视区域的内容,显著减少 DOM 节点数量。
131 0
|
8月前
|
JSON 自然语言处理 前端开发
【01】对APP进行语言包功能开发-APP自动识别地区ip后分配对应的语言功能复杂吗?-成熟app项目语言包功能定制开发-前端以uniapp-基于vue.js后端以laravel基于php为例项目实战-优雅草卓伊凡
【01】对APP进行语言包功能开发-APP自动识别地区ip后分配对应的语言功能复杂吗?-成熟app项目语言包功能定制开发-前端以uniapp-基于vue.js后端以laravel基于php为例项目实战-优雅草卓伊凡
437 72
【01】对APP进行语言包功能开发-APP自动识别地区ip后分配对应的语言功能复杂吗?-成熟app项目语言包功能定制开发-前端以uniapp-基于vue.js后端以laravel基于php为例项目实战-优雅草卓伊凡
|
6月前
|
JavaScript API 容器
Vue 3 中的 nextTick 使用详解与实战案例
Vue 3 中的 nextTick 使用详解与实战案例 在 Vue 3 的日常开发中,我们经常需要在数据变化后等待 DOM 更新完成再执行某些操作。此时,nextTick 就成了一个不可或缺的工具。本文将介绍 nextTick 的基本用法,并通过三个实战案例,展示它在表单验证、弹窗动画、自动聚焦等场景中的实际应用。
559 17