Vue3项目起步该做的二三事

╰半夏微凉° 2023-10-03 12:32 65阅读 0赞

目录

1.添加配置文件

  1. vuex-持久化插件

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

  3. 封装axios-集中添加token

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

  1. 路由设计

  2. 安装调试工具

8.划分vuex模块


1.添加配置文件


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

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

  1. {
  2. "compilerOptions": {
  3. "baseUrl": ".",
  4. "paths": {
  5. "@/*": ["./src/*"],
  6. }
  7. },
  8. "exclude": ["node_modules", "dist"]
  9. }

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

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

  1. /dist
  2. /src/vender

#

2. vuex-持久化插件


业务场景:

多用于保存用户token


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

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


步骤:

01 安装插件

  1. npm i vuex-persistedstate

02 使用 store/index.js中

  1. import { createStore } from 'vuex'
  2. + import createPersistedstate from 'vuex-persistedstate'
  3. import user from './modules/user'
  4. import cart from './modules/cart'
  5. import cart from './modules/category'
  6. export default createStore({
  7. modules: {
  8. user,
  9. cart,
  10. category
  11. },
  12. + plugins: [
  13. + createPersistedstate({
  14. + key: 'erabbit-client-pc-store',
  15. + paths: ['user', 'cart']
  16. + })
  17. + ]
  18. })

注意点:

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

#

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


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

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


步骤:

01 安装 axios

  1. npm i axios

02 新建request模块

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

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

4. 封装axios-集中添加token


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

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

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


目标:

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

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


代码实现:

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

#

6. 路由设计


watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dhbmdoYW95aW5nYW5k_size_16_color_FFFFFF_t_70

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

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

#

7. 安装调试工具


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


Dev-tools安装

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


Logger Plugin 安装

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

安装好这个log插件之后,我们每次触发action函数和mutation函数都可以在控制台打印出当前本地提交的记录详细信息,包括名称 参数 修改前后的state数据

  1. + import { createLogger } from 'vuex'
  2. export default createStore({
  3. modules: {
  4. user,
  5. cart,
  6. category
  7. },
  8. plugins: [
  9. + createLogger()
  10. ]
  11. })

8.划分vuex模块


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


步骤:01 创建modules:


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

  1. // 用户模块
  2. export default {
  3. namespaced: true,
  4. state () {
  5. return {
  6. // 用户信息
  7. profile: {
  8. id: '',
  9. avatar: '',
  10. nickname: '',
  11. account: '',
  12. mobile: '',
  13. token: ''
  14. }
  15. }
  16. },
  17. mutations: {
  18. // 修改用户信息,payload就是用户信息对象
  19. setUser (state, payload) {
  20. state.profile = payload
  21. }
  22. }
  23. }

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


src/store/index.js 中导入

  1. import { createStore } from 'vuex' // vuex 的工厂函数
  2. import user from './modules/user' // 引入咱们写的模块
  3. import cart from './modules/cart'
  4. import category from './modules/category'
  5. export default createStore({
  6. modules: {
  7. user, // 在这里注册
  8. cart,
  9. category
  10. }
  11. })

发表评论

表情:
评论列表 (有 0 条评论,65人围观)

还没有评论,来说两句吧...

相关阅读

    相关 Vue起步

    Vue起步 1.Vue.js是什么 Vue 是一套用于构建用户界面的渐进式框架。与其它大型框架不同的是,Vue 被设计为可以自底向上逐层应用。Vue 的核心库只关注

    相关 学习vue怎么起步

    本文将持续更新。 关于vue的学习,虽说官网有非常详尽的文档,但初学者总归是有些茫然无措。 小编决定花一点点时间,梳理一些快速上手的要点帮助后来人。 先不着急用脚手架,

    相关 程序员每天

    程序员每天该做的事 1、总结自己一天任务的完成情况  最好的方式是写工作日志,把自己今天完成了什么事情,遇见了什么问题都记录下来,日后翻看好处多多 2、考虑自