当前位置: 首页 > news >正文

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标准屏幕

相关文章:

Vue学习笔记4

Vue学习笔记 一、自定义创建项目 基于VueCli自定义创建项目架子 二、vuex基本认知 1、vuex概述 是什么:是vue的状态管理工具(插件),状态就是数据 大白话:vuex是一个插件,可以帮助我们管理vue通用的数…...

mariadb数据库的安装与部署

1、通过yum源安装mariadb数据库 yum -y install mariadb-server 2、启动mariadb数据库服务 systemctl start mariadb.service 3、配置mariadb数据库全局环境变量 systemctl enable mariadb.service 4、修改mariadb数据库默认密码,数据库默认密码为空 执行…...

单调队列与栈

一.题 1. 思路&#xff1a; 构建小压大的单调递减栈&#xff0c;对于每个栈的元素都进行处理并加到结果上 class Solution { public:int sumSubarrayMins(vector<int>& arr) {int stk[10000000],top 0;long long ans 0;for(int i 0;i<arr.size();i){while(top…...

Matlab 多项式曲线拟合(三维)

文章目录 一、简介二、实现代码三、实现效果参考资料一、简介 对于高维空间曲线的拟合,参数化是一种非常好的方式,可以让我们很容易得到我们想要的目标曲线。 假设给定一组数据点 ( u i ​ , x i ​ ) 、 ( u i ​...

机器翻译同样的文本,是从英语翻译成日语更准确还是中文翻译成日语更准确

在大多数情况下&#xff0c;从英语翻译成日语会比从中文翻译成日语更准确&#xff0c;原因如下&#xff1a; 1. 语言结构的相似性 英语和日语的句子结构更接近&#xff0c;特别是在语法、从句使用、定语位置等方面。例如&#xff0c;日语和英语都使用 SVO 结构&#xff08;主…...

MAC 系统关屏幕后电量消耗极快 Wake Requests

日志为 Wake Requests [*processdasd requestSleepService…info"com.apple.alarm.user-invisible-com.apple.calaccessd… 本人有效方法为&#xff1a; sudo pmset -a hibernatemode 25 sudo pmset -a standby 0 sudo pmset -a autopoweroff 0 会导致hibernatemode 25是…...

golangAPI调用deepseek

目录 1.deepseek官方API调用文档1.访问格式2.curl组装 2.go代码1. config 配置2.模型相关3.错误处理4.deepseekAPI接口实现5. 调用使用 3.响应实例 1.deepseek官方API调用文档 1.访问格式 现在我们来解析这个curl 2.curl组装 // 这是请求头要加的参数-H "Content-Type:…...

提供可传递的易受攻击的依赖项

问题如图所示&#xff1a; 原因&#xff1a;okhttp3.version 3.14.9 版本存在部分漏洞&#xff0c;在 maven 仓库是可以看到的 maven 地址&#xff1a; maven 下图中 Vulnerabilities 即为漏洞 处理&#xff1a;换一个无漏洞的版本即可...

2.14学习记录

Web flag直接读取不就行了&#xff1f; 代码审计&#xff1a; <?php highlight_file(index.php); # 我把flag藏在一个secret文件夹里面了&#xff0c;所以要学会遍历啊~ error_reporting(0); $J1ng $_POST[J]; $Hong $_POST[H]; $Keng $_GET[K]; $Wang $_GET[W]; $d…...

xpath定位--鼠标悬停显示的按钮

UI自动化定位界面元素的过程中&#xff0c;会遇到鼠标悬停才会显示的按钮&#xff0c;鼠标移开就不显示了&#xff0c;无法通过点击它直接定位到元素位置 搜索到这篇文档&#xff0c;办法很好用&#xff0c;特此记录下&#xff1a;chrome调试鼠标悬停后出现的元素_控制台元素调…...

鸿蒙Harmony打包脚本使用整理

最近整理鸿蒙打包相关事宜&#xff0c;遇到很多文档描述不清晰的问题&#xff0c;好在都通过鸿蒙团队的技术支持解决掉了。这里整理一下。 command-line-tools的命令官网基本都有&#xff0c;这里整理几个常用的&#xff0c;还有就是遇到的问题。 hvigorw位置&#xff1a;/comm…...

【C语言】C语言 停车场管理系统的设计与实现(源码)【独一无二】

&#x1f449;博__主&#x1f448;&#xff1a;米码收割机 &#x1f449;技__能&#x1f448;&#xff1a;C/Python语言 &#x1f449;专__注&#x1f448;&#xff1a;专注主流机器人、人工智能等相关领域的开发、测试技术。 系列文章目录 目录 系列文章目录一、设计要求二、设…...

在Autonomous DB中创建训练数据集

在Autonomous DB中创建训练数据集 概述背景步骤解析1. 定义公司术语表2. 使用SQL将数据转换为JSON格式3. 使用SPool命令将SQL查询结果输出为JSON文件4. 查看生成的JSON文件 结果示例结论 概述 在机器学习中&#xff0c;构建高质量的训练数据集是模型成功的关键&#xff0c;尤其…...

Adapting to Length Shift: FlexiLength Network for Trajectory Prediction

概要 轨迹预测在各种应用中发挥着重要作用&#xff0c;包括自动驾驶、机器人技术和场景理解。现有方法通常采用标准化的输入时长&#xff0c;集中于开发紧凑神经网络&#xff0c;以提高在公共数据集上的预测精度。然而&#xff0c;当这些模型在不同观测长度下进行评估时&#…...

张量循环运算:内存溢出原因及解决

写在前面&#xff1a;本博客仅作记录学习之用&#xff0c;部分图片来自网络&#xff0c;如需引用请注明出处&#xff0c;同时如有侵犯您的权益&#xff0c;请联系删除&#xff01; 文章目录 内存溢出解决方法致谢 内存溢出 使用AlexNet遍历大量图像进行指标运算&#xff08;LP…...

【Qt】:概述(下载安装、认识 QT Creator)

&#x1f308; 个人主页&#xff1a;Zfox_ &#x1f525; 系列专栏&#xff1a;Qt 目录 一&#xff1a;&#x1f525; 介绍 &#x1f98b; 什么是 QT&#x1f98b; QT 发展史&#x1f98b; Qt版本&#x1f98b; QT 优点 一&#xff1a;&#x1f525; 搭建Qt开发环境 &#x1f9…...

11、《Web开发性能优化:静态资源处理与缓存控制深度解析》

Web开发性能优化&#xff1a;静态资源处理与缓存控制深度解析 一、性能优化的核心战场&#xff1a;静态资源处理 现代Web应用静态资源体积占比普遍超过70%&#xff0c;以典型Vue项目为例&#xff1a; dist/ ├─ css/ # 38% 体积 ├─ js/ # 45% 体积 └─ img…...

【Linux】多线程 -> 从线程概念到线程控制

线程概念 在一个程序里的一个执行路线就叫做线程&#xff08;thread&#xff09;。更准确的定义是&#xff1a;线程是“一个进程内部的控制序列”。一切进程至少都有一个执行线程。线程在进程内部运行&#xff0c;本质是在进程地址空间内运行。在Linux系统中&#xff0c;在CPU眼…...

用什么办法能实现ubuntu里面运行的自己开发的python程序能自动升级。

要实现Ubuntu中自己开发的Python程序自动升级&#xff0c;可以通过以下几种方式&#xff1a; 1. 使用 Git 仓库 定时任务 如果你的Python程序托管在Git仓库中&#xff0c;可以通过定时拉取最新代码来实现自动升级。 步骤&#xff1a; 确保Python程序在Git仓库中。在Ubuntu上…...

java处理pgsql的text[]类型数据问题

背景 公司要求使用磐维数据库&#xff0c;于是去了解了这个是基于PostgreSQL构建的&#xff0c;在使用时有场景一条图片数据中可以投放到不同的页面&#xff0c;由于简化设计就放在数组中&#xff0c;于是使用了text[]类型存储&#xff1b;表结构 #这是一个简化版表结构&…...

利用最小二乘法找圆心和半径

#include <iostream> #include <vector> #include <cmath> #include <Eigen/Dense> // 需安装Eigen库用于矩阵运算 // 定义点结构 struct Point { double x, y; Point(double x_, double y_) : x(x_), y(y_) {} }; // 最小二乘法求圆心和半径 …...

React第五十七节 Router中RouterProvider使用详解及注意事项

前言 在 React Router v6.4 中&#xff0c;RouterProvider 是一个核心组件&#xff0c;用于提供基于数据路由&#xff08;data routers&#xff09;的新型路由方案。 它替代了传统的 <BrowserRouter>&#xff0c;支持更强大的数据加载和操作功能&#xff08;如 loader 和…...

《Playwright:微软的自动化测试工具详解》

Playwright 简介:声明内容来自网络&#xff0c;将内容拼接整理出来的文档 Playwright 是微软开发的自动化测试工具&#xff0c;支持 Chrome、Firefox、Safari 等主流浏览器&#xff0c;提供多语言 API&#xff08;Python、JavaScript、Java、.NET&#xff09;。它的特点包括&a…...

1.3 VSCode安装与环境配置

进入网址Visual Studio Code - Code Editing. Redefined下载.deb文件&#xff0c;然后打开终端&#xff0c;进入下载文件夹&#xff0c;键入命令 sudo dpkg -i code_1.100.3-1748872405_amd64.deb 在终端键入命令code即启动vscode 需要安装插件列表 1.Chinese简化 2.ros …...

生成 Git SSH 证书

&#x1f511; 1. ​​生成 SSH 密钥对​​ 在终端&#xff08;Windows 使用 Git Bash&#xff0c;Mac/Linux 使用 Terminal&#xff09;执行命令&#xff1a; ssh-keygen -t rsa -b 4096 -C "your_emailexample.com" ​​参数说明​​&#xff1a; -t rsa&#x…...

Cloudflare 从 Nginx 到 Pingora:性能、效率与安全的全面升级

在互联网的快速发展中&#xff0c;高性能、高效率和高安全性的网络服务成为了各大互联网基础设施提供商的核心追求。Cloudflare 作为全球领先的互联网安全和基础设施公司&#xff0c;近期做出了一个重大技术决策&#xff1a;弃用长期使用的 Nginx&#xff0c;转而采用其内部开发…...

前端开发面试题总结-JavaScript篇(一)

文章目录 JavaScript高频问答一、作用域与闭包1.什么是闭包&#xff08;Closure&#xff09;&#xff1f;闭包有什么应用场景和潜在问题&#xff1f;2.解释 JavaScript 的作用域链&#xff08;Scope Chain&#xff09; 二、原型与继承3.原型链是什么&#xff1f;如何实现继承&a…...

ArcGIS Pro制作水平横向图例+多级标注

今天介绍下载ArcGIS Pro中如何设置水平横向图例。 之前我们介绍了ArcGIS的横向图例制作&#xff1a;ArcGIS横向、多列图例、顺序重排、符号居中、批量更改图例符号等等&#xff08;ArcGIS出图图例8大技巧&#xff09;&#xff0c;那这次我们看看ArcGIS Pro如何更加快捷的操作。…...

关键领域软件测试的突围之路:如何破解安全与效率的平衡难题

在数字化浪潮席卷全球的今天&#xff0c;软件系统已成为国家关键领域的核心战斗力。不同于普通商业软件&#xff0c;这些承载着国家安全使命的软件系统面临着前所未有的质量挑战——如何在确保绝对安全的前提下&#xff0c;实现高效测试与快速迭代&#xff1f;这一命题正考验着…...

Java线上CPU飙高问题排查全指南

一、引言 在Java应用的线上运行环境中&#xff0c;CPU飙高是一个常见且棘手的性能问题。当系统出现CPU飙高时&#xff0c;通常会导致应用响应缓慢&#xff0c;甚至服务不可用&#xff0c;严重影响用户体验和业务运行。因此&#xff0c;掌握一套科学有效的CPU飙高问题排查方法&…...