Vue学习笔记4

Vue学习笔记

一、自定义创建项目

基于VueCli自定义创建项目架子
在这里插入图片描述

二、vuex基本认知

1、vuex概述

是什么:是vue的状态管理工具(插件),状态就是数据
大白话:vuex是一个插件,可以帮助我们管理vue通用的数据(多组件共享的数据)

2、应用场景

某个状态在很多个组件都使用(如个人信息)
多个组件共同维护一份数据(购物车)

3、优势

共同维护同一份数据,数据集中化管理
响应式变化
操作简捷(vuex提供了一些辅助函数)

三、vuex的应用

1、构建vuex环境

效果是三个组件共享一份数据:

  • 任意一个组件都可以修改数据
  • 三个组件的数据是同步的

2、创建一个空仓库

目标:安装vuex插件,初始化一个空仓库
步骤:

  1. 安装vuex(yarn add vue3–>npm?)
  2. 新建vuex模块文件(新建store/index.js专门存放vuex)
  3. 创建仓库
    • 插件安装Vue.use(Vuex)
    • 创建仓库new Vuex.Store()
  4. 导出给main.js使用(export default store)
  5. main.js导入挂载(在main.js中导入挂载到Vue实例上)

3、如何提供&访问vuex数据

  1. 提供数据
    State提供唯一的公共数据源,所有共享的数据都要统一放到Store中的State中存储。在state对象中可以添加我们要共享的数据
  2. 使用数据
    • 通过store直接访问
      获取store:(1)this.$store(2)import导入store
      模板中:{{ $store.state.xxx }} 组件逻辑中:this.$store.state.xxx JS模块中:store.state.xxx
    • 通过辅助函数(简化)
      mapState是辅助函数,帮助我们把store中的数据自动映射到组件的计算属性中
      步骤:
      1.导入mapState (import {mapState} from ‘vuex’)
      2.数据方式引入state (masState([‘count’]))
      3.展开运算符映射
computed:{...mapState(['count'])
}

4、修改数据

vuex同样遵循单向数据流,组件中不能直接修改仓库的数据
strict:true(在创建的仓库中)开启严格模式,在组件中直接修改仓库数据时会报错

(1)mutation修改数据

修改仓库中的数据通过mutations
仓库中封装mutation函数–>页面中commit调用

//store/index.js修改
const store = new Vue.Store({strict:true,state:{title:'仓库大标题',count:100},mutations:{//所有mutation函数,第一个参数都是stateaddCount(state){state.count+=1},changeTitle(state){state.title='仓库新标题'}}
})
//组件中调用
methods:{handleAdd(){this.$store.commit('addCount')}
}
(2)mutation传参
//store/index.js修改
const store = new Vue.Store({strict:true,state:{title:'仓库大标题',count:100},mutations:{//所有mutation函数,第一个参数都是stateaddCount(state,n){state.count+=n},changeTitle(state,newTitle){state.title = newTitle}}
})
//组件中调用
methods:{handleAdd(n){this.$store.commit('addCount',10)}
}
(3)与input配合
  1. 给input添加:value='count'属性(已经利用了辅助函数mapState的前提下可以直接使用count),此操作后count改变input输入框内的值也跟着改变
  2. 给input添加@input=‘handleChange’,并给组件添加methods函数handleChange
  3. 在仓库中封装mutation处理函数
  4. 在handleChange中调用传参 this.$store.commit(‘mutation中的函数名’,参数)
(4)辅助函数mapMutations

与mapState原理相似,可以将mutations中的方法提取出来,映射都组件methods中
步骤:
1.导入mapMutations (import {mapMutations} from ‘vuex’)
2.数据方式引入(mapMutations([‘subCount’]))
3.使用

methods:{...mapMutations(['subCount']),handleAdd(n){this.subCount(n)}
}
或不需要封装,直接在页面中使用
@click='subCount(1)'

四、actions

1、actions应用

需求:一秒钟之后,修改state的count成666(mutations必须是同步的)
不能直接操作state,如果想要操作state还是需要commit mutation

  1. 提供action方法
actions:{action名字(context,num){setTimeout(()=>{context.commit('mutation名字',num)},1000)}
}
  1. 页面中dispatch调用
this.$store.dispatch('action名字',200)

2、辅助函数mapActions

把位于actions中的方法提取了出来,映射到组件methods中
步骤:
1.导入mapActions(import {mapActions} from ‘vuex’)
2.数据方式引入(mapActions([‘actions名字’]))
3.使用

methods:{...mapActions(['actions名字']),methods名字(参数){this.actions名字(参数)}
}
或不需要封装,直接在页面中使用
@click='actions名字(参数)'

五、getters

除了state之外,有时我们还需要从state中派生出一些状态(从state中提取出一些符合特定规则的数据),这些状态是依赖state的,此时会用到getters。

  1. 定义getters
getters:{
//1.形参第一个参数必须是state
//2.必须有返回值,返回值就是getters的值filterList(state){return state.list.filter(item=>item>5)}
}

注意:
(1)getters函数的第一个参数是state
(2)getters函数必须要有返回值
2. 访问getters
(1)通过store访问getters

{{ $store.getters.filterList }}

(2)通过辅助函数mapGetters映射
步骤:
1.导入mapGetters(import {mapGetters} from ‘vuex’)
2.数据方式引入(mapGetters([‘getters名字’]))
3.使用

computed:{...mapGetters(['filterList'])
},
{{ filterList }}使用

mapState和mapGetters都是映射属性的,mapMutations和mapActions都是用来映射方法的

六、模块module

1、初始设置

由于vuex使用单一状态数,应用的所有状态会集中到一个比较大的对象,当应用变得非常复杂时,store对象就有可能变得相当臃肿。当项目越来越大时,vuex就会变得难以维护。
模块拆分语法:

  1. 新建store/module/模块名.js,每个模块都有自己的四个核心概念(state、mutation、action、getter)
//各个模块名.js中
const state(){}
const mutations(){}
const action(){}
const getter(){}
export default{state,mutations,action,getter,
}
//index.js中
import 模块名 ftom
const store=new Vue.Store({modules:{模块名}
})

2、访问state

子模块的状态会挂到根级别的state中,属性名就是模块名
访问方法

  1. 直接通过模块名访问$store.state.模块名.xxx
  2. 通过mapState映射
    • 默认根级别的映射:mapState([‘模块名’])–>使用{{ 模块名.xxx.xxx }}
    • 子模块的映射:开启命名空间namespaced:true(在模块名.js中的export default(导出部分)中),子模块的映射mapState(‘模块名’,[‘xxx’])–>使用{{ xxx }}

3、模块中的getters中的数据

  1. 直接通过模块名访问$store.getters['模块名/xxx']
  2. 通过mapGetters映射
    • 默认根级别的映射mapGetters([‘模块名’])
    • 子模块的映射mapGetters(‘模块名’,[‘xxx’]),也需要开启命名空间

4、模块中mutation的调用

context上下文,默认提交的就是自己模块的action和mutation
注意:默认模块中的mutation和action会被挂载到全局,需要开启命名空间,才会被挂载到子模块
调用模块中的mutation:

  1. $store.commit(‘模块名/xxx’,额外参数)
  2. 通过mapMutations映射
    • 默认根级别的映射 mapMutations([‘xxx’])
    • 子模块的映射mapMutations(‘模块名’,[‘xxx’]),也需要开启命名空间

5、模块中actions的调用

调用模块中的mutation:

  1. $store.dispatch(‘模块名/xxx’,额外参数)
  2. 通过mapActions映射
    • 默认根级别的映射 mapActions([‘xxx’])
    • 子模块的映射mapActions(‘模块名’,[‘xxx’]),也需要开启命名空间

七、符合企业规范的目录请添加图片描述

  1. 删除多余文件(目录下原有的一些多余文件)
  2. 修改路由配置和App.vue(原路由配置清空/App.vue中只留一个路由出口)
  3. 新增两个目录api/utils
    • api接口模块:发送ajax请求的接口模块
    • utils工具模块:自己封装的一些工具方法模块

八、vant组件库的按需导入导出

组件库:第三方封装好了很多组件,整合到一起就是一个组件库
https://develop365.gitlab.io/vant/v2/zh-CN/home/
安装vant组件库

Vue 3 项目,安装最新版 Vant:
npm i vant -S
Vue 2 项目,安装 Vant 2:
npm install eslint-plugin-vue@7.20.0//降低一下npm版本
npm i vant@latest-v2 -S

自动按需引入组件

  1. 安装

npm i babel-plugin-import -D

  1. 添加配置
// 在 babel.config.js 中配置
module.exports = {plugins: [['import', {libraryName: 'vant',libraryDirectory: 'es',style: true}, 'vant']]
};
  1. 在页面中引入vant组件
import { Button } from 'vant';

九、项目中的vw适配

目标:基于postcss插件实现项目vw适配(px自动转换为vw)
步骤:

  1. 安装插件

npm install postcss-px-to-viewport@1.1.1 -D

  1. postcss配置
// postcss.config.js
module.exports = {plugins: {'postcss-px-to-viewport': {viewportWidth: 375,},},
};

vw适配的标准屏的宽度 iphoneX
设计图750,调成1倍=>适配375标准屏幕
设计图640,调成1倍=>适配320标准屏幕

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/18333.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

文心一言4月起全面免费,6月底开源新模型:AI竞争进入新阶段?

名人说:莫听穿林打叶声,何妨吟啸且徐行。—— 苏轼 Code_流苏(CSDN)(一个喜欢古诗词和编程的Coder😊) 目录 一、文心一言免费化的背后:AI成本与应用的双重驱动1️⃣成本下降,推动文心一言普及2…

SSM课设-学生选课系统

【课设者】SSM课设-学生选课系统 分为 管理员 和 老师 和 学生端 技术栈 前端: HtmlCssJavaScriptAjax 后端: Spring、Spring MVC、MyBatis、MySQL、JSP 学生端 --选课 选课 搜索 --查看选课结果 --退选 --查看已修课程 --管理个人信息 老师端 --添加教学课程 添加 …

LabVIEW外腔二极管激光器稳频实验

本项目利用LabVIEW软件开发了一个用于外腔二极管激光器稳频实验的系统。系统能够实现激光器频率的稳定控制和实时监测,为激光实验提供了重要支持。 项目背景: 系统解决了外腔二极管激光器频率不稳定的问题,以满足对激光器频率稳定性要求较高…

windows,docker停止所有容器

CMD命令窗口 你可以尝试使用以下命令来停止所有正在运行的Docker容器: FOR /f "tokens*" %i IN (docker ps -q) DO docker stop %i这条命令的工作原理是: docker ps -q 列出所有正在运行的容器的ID。 FOR /f "tokens*" %i IN (c…

RedHat8安装postgresql15和 postgis3.4.4记录及遇到的问题总结

安装包对照版本参考 UsersWikiPostgreSQLPostGIS – PostGIS 如果Red Hat系统上有旧版本的PostgreSQL需要卸载 在较新的Red Hat版本,使用dnf包管理器卸载:sudo dnf remove postgresql-server postgresql 旧版本,使用yum包管理器卸载 sudo y…

DBeaver clickhouse 时区不对 时间少了8小时

选择DataBase选择Driver Manager选择clickhouse数据库点中之后,选择编辑添加两个全局属性 use_server_time_zone use_time_zone 鼠标移动到User Properties上,右键即可添加一列空白 然后断开重连

【vscode】VScode Remote SSH配置

VScode使用remote ssh 到服务器上的Docker容器中 1. 配置远程服务器docker容器的端口映射,例如将服务器的2222端口映射到container的22端口(默认) 1.1 在容器系统的sshd_config文件中配置参数 #配置文件 vim /etc/ssh/sshd_config #打开端口号 Port 221.2 建立容…

光谱相机在天文学领域的应用

天体成分分析 恒星成分研究:恒星的光谱包含了其大气中各种元素的吸收和发射线特征。通过光谱相机精确测量这些谱线,天文学家能确定恒星大气中氢、氦、碳、氮、氧等元素的含量。如对太阳的光谱分析发现,太阳大气中氢元素占比约 71%&#xff0…

MySQL错误-this is incompatible with sql_mode=only_full_group_by完美解决方案

项目场景 有时候,遇到数据库重复数据,需要将数据进行分组,并取出其中一条来展示,这时就需要用到group by语句。 但是,如果mysql是高版本,当执行group by时,select的字段不属于group by的字段的…

Unity 全部版本下载存档【需要梯子】

首先 挂一个非cn的梯子(因为实测港澳不行,会跳转到cn官网) 然后打开这个网址: Download Archive 最后打开你的Unity Hub 点击下载就可以自动跳转到Hub里下载了

同为科技智能PDU助力Deepseek人工智能和数据交互的快速发展

1 2025开年,人工智能领域迎来了一场前所未有的变革。Deepseek成为代表“东方力量”的开年王炸,不仅在国内掀起了技术热潮,并且在全球范围内引起了高度关注。Deepseek以颠覆性技术突破和现象级应用场景席卷全球,这不仅重塑了产业格…

Linux-C/C++《七、字符串处理》(字符串输入/输出、C 库中提供的字符串处理函数、正则表达式等)

字符串处理在几乎所有的编程语言中都是一个绕不开的话题,在一些高级语言当中,对字符串的处理支 持度更是完善,譬如 C、 C# 、 Python 等。若在 C 语言中想要对字符串进行相关的处理,譬如将两个字符串进行拼接、字符串查找、两个…

Golang GORM系列:GORM事务及错误处理

在数据库管理领域,确保数据完整性至关重要。GORM是健壮的Go对象关系映射库,它为开发人员提供了维护数据一致性和优雅地处理错误的基本工具。本文是掌握GORM事务和错误处理的全面指南。我们将深入研究如何使用事务来保证原子性,并探索有效处理…

「软件设计模式」工厂方法模式(Factory Method) vs 抽象工厂模式(Abstract Factory)

前言 在软件工程领域,设计模式是解决常见问题的经典方案。本文将深入探讨两种创建型模式:工厂方法模式和抽象工厂模式,通过理论解析与实战代码示例,帮助开发者掌握这两种模式的精髓。 一、工厂方法模式(Factory Metho…

给本地模型“投喂“数据

如何训练本地Deepseek-r1:7b模型 在前面两篇文章中,我在自己的电脑的本地部署了Deepseek的7b的模型,并接入到我Chrome浏览器的插件中,使用起来更方便了。在使用的过程中发现7b的推理能力确实没有671满血版本的能力强,很多问题回答…

在Spring Cloud项目中集成MySQL、MyBatis-Plus与HikariCP

一. 小知识 mysql-connector-java 和 mysql-connector-j 的区别 mysql-connector-java 和 mysql-connector-j 实际上指的是同一个MySQL官方提供的JDBC驱动程序,但它们代表了这个驱动在不同时间点的命名。 mysql-connector-java:这是旧的命名方式&#xf…

利用IDEA将Java.class文件反编译为Java文件:原理、实践与深度解析

文章目录 引言:当.class文件遇到源代码缺失第一章:反编译技术基础认知1.1 Java编译执行原理1.2 反编译的本质1.3 法律与道德边界 第二章:IDEA内置反编译工具详解2.1 环境准备2.2 三步完成基础反编译2.3 高级反编译技巧2.3.1 调试模式反编译2.…

【openresty服务器】:源码编译openresty支持ssl,增加service系统服务,开机启动,自己本地签名证书,配置https访问

1,openresty 源码安装,带ssl模块 https://openresty.org/cn/download.html (1)PCRE库 PCRE库支持正则表达式。如果我们在配置文件nginx.conf中使用了正则表达式,那么在编译Nginx时就必须把PCRE库编译进Nginx&#xf…

清华大学《DeepSeek:从入门到精通》

近日,清华大学新闻与传播学院新媒体研究中心元宇宙文化实验室发布了由余梦珑博士后及其团队撰写的《DeepSeek:从入门到精通》手册。这份长达104页的指南,旨在帮助用户全面掌握国产通用人工智能平台DeepSeek的核心功能与应用技巧。 DeepSeek简…