Vue [Day7]

文章目录

  • 自定义创建项目
  • ESlint 代码规范
  • vuex 概述
  • 创建仓库
  • 向仓库提供数据
  • 使用仓库中的数据
    • 通过store直接访问
    • 通过辅助函数 mapState(简化)
    • mutations传参语法(同步
    • 实时输入,实时更新
    • 辅助函数 mapMutations
    • action (异步
    • 辅助函数mapActions
  • getters (类似于计算属性
    • 通过store访问getters
    • 通过辅助函数mapGetters映射
  • 模块module
    • 使用模块中的数据 / 模块中state的访问语法
      • 直接通过模块名访问
      • 通过mapState映射
        • 默认根级别的映射 ...mapState(['user', 'setting'])
        • 子模块映射 mapState('模块名',['xxx]) +开启命名空间
    • 使用模块中getters中的数据 / 模块中getters的访问语法
      • 直接通过模块名访问 $store.getters['模块名/xxx']
      • 通过mapGetters映射
        • 默认根级别映射mapGetters(['xxx'])
        • 子模块映射mapGetters('模块名',['xxx'])+开启命名空间Son2.vue
    • 掌握模块中的mutation调用语法
      • 直接通过store调用 $store.commit('模块名/xxx',额外参数)
      • 通过mapMutations映射
        • 默认根级别映射mapMutations(['xxx'])
        • 子模块映射mapMutations('模块名',['xxx'])+开启命名空间
      • 直接通过模块名访问 $store.dispatch('模块名/xxx',额外参数)
      • 通过mapActions映射
        • 默认根级别映射mapActions(['xxx'])
        • 子模块映射mapActions('模块名',['xxx'])+开启命名空间

自定义创建项目

vue create exp-mobile(项目名

2.选第三个,自定义

3.空格是选中

在这里插入图片描述

4.选vue 2.x
在这里插入图片描述

5.选择哈希

在这里插入图片描述
6.选择Less处理器

在这里插入图片描述
7.选择无分号规范

在这里插入图片描述
8.选择保存时校验
在这里插入图片描述
9.将配置文件放在单独文件中
在这里插入图片描述

小结
在这里插入图片描述

ESlint 代码规范

在这里插入图片描述



vuex 概述

在这里插入图片描述

创建仓库

在这里插入图片描述



store/index.js

// 这里存放的就是vuex相关的核心代码
import Vue from 'vue'
import Vuex from 'vuex'// 插件安装
Vue.use(Vuex)// 创建空仓库
const store = new Vuex.Store()// 导出给main.js
export default store


main.js

import Vue from 'vue'
import App from './App.vue'
import store from './store'Vue.config.productionTip = falsenew Vue({render: h => h(App),store //! !!!!//   仓库在所有组件都可以访问,用this.$store}).$mount('#app')


App.vue

 created () {console.log(this.$store)}


向仓库提供数据






store/index.js

// 创建空仓库
const store = new Vuex.Store({// 通过state可以提供数据,所有组件共享的数据,任意组件都可以访问state: {title: 'hhhhh',count: 100}
})


使用仓库中的数据

通过store直接访问

在这里插入图片描述




components/Son2.vue

div class="box"><h2>Son2 子组件</h2>从vuex中获取的值:<label>{{$store.state.count}}</label><br /><button>- 1</button></div>


通过辅助函数 mapState(简化)

mapState把store中的数据自动映射到组件的计算属性computed中

computed: {...mapState(['count', 'title'])},

在这里插入图片描述



App.vue 节选

<template><div id="app"><h1>根组件{{ $store.state.title }}</h1><!-- 3.用了 mapState ,就直接简写 --><h1>根组件{{ title }}</h1><input type="text"><Son1></Son1><hr><Son2></Son2></div></template><script>
import Son1 from './components/Son1.vue'
import Son2 from './components/Son2.vue'// 1.导入
import { mapState } from 'vuex'
console.log(mapState(['count', 'title']))export default {name: 'app',//   2.展开运算符进行映射computed: {...mapState(['count', 'title'])},


# 组件(间接)修改仓库数据 mutation

在这里插入图片描述



在这里插入图片描述



store/index.js

import Vue from 'vue'
import Vuex from 'vuex'Vue.use(Vuex)const store = new Vuex.Store({strict: true,state: {title: 'hhhhh',count: 100},// 通过mutations可以提供修改数据的方法mutations: {// 所有mutations函数,第一个参数,都是stateaddCount (state) {state.count++}}
})export default store

App.vue

    <span  @click="handleAdd">count</span>      <input type="text">methods: {handleAdd () {// 调用this.$store.commit('addCount')}},


mutations传参语法(同步

提交参数只能有一个,如果有多个参数,包装成一个对象传递
在这里插入图片描述


实时输入,实时更新

不能用v-model,因为vuex是单向数据流
但是v-model 等于 :value @input在这里插入图片描述



App.vue
  <input :value="title" @input="handleInput" type="text">handleInput (e) {// 1.实时获取输入框的值console.log(e.target.value)// 2.提交mutation,调用mutation函数this.$store.commit('changeTitle', e.target.value)}


store/index.js
changeTitle (state, newTitle) {state.title = newTitle}


辅助函数 mapMutations

把位于mutations中的方法提取出来,映射到methods中
在这里插入图片描述



store/index.js

const store = new Vuex.Store({strict: true,state: {title: 'hhhhh',count: 100},// 通过mutations可以提供修改数据的方法mutations: {subCount (state, n) {state.count -= n},changeTitle (state, newTitle) {state.title = newTitle},changeCount (state, tt) {state.count = tt}} })


Son1.vue

 <button @click="handleSub(10)">- 10</button><button @click="handleSub(20)">- 20</button><button @click="handleSub(30)">- 30</button><!-- 更简单的写法,连外面的函数都不套了 --><button @click="subCount(2)">- 2</button><br><button @click="changeTitle('qqq')">改成【qqq】标题</button>...mapMutations(['subCount', 'changeTitle']),handleSub (tt) {this.subCount(tt)},


action (异步

在这里插入图片描述


辅助函数mapActions

把actions中的方法提取出来,映射到组件methods


( …mapMutations([‘subCount’, ‘changeTitle’]),和 …mapActions([‘changeCountAction’]) 都在methods中
在这里插入图片描述index.js

//  action 处理异步// 不能直接操作state,操作state还是需要commit mutationactions: {// 此处未分模块,可当成store仓库// context.commit('mutation名字',额外参数)changeCountAction (context, num) {// 这里是setTime模拟异步,以后大部分场景是发请求setTimeout(() => {context.commit('changeCount', num)}, 2000)}}

Son2.vue

<button @click="changeCountAction(0)">2秒后改成count=0</button>methods: {changeTitle () {this.$store.commit('changeTitle', 'sssss')},...mapActions(['changeCountAction']) // !!!!}

getters (类似于计算属性

在这里插入图片描述

通过store访问getters

store/index.js

 state: {title: 'hhhhh',count: 100,list: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]},//   类似于计算属性getters: {// 注意点:// 1. 形参第一个参数,就是state// 2. 必须有返回值,返回值就是getters的值filterList (state) {return state.list.filter(item => item > 5)}}


Son1.vue
<hr>
<div>{{$store.state.list}}</div>
<div>{{ $store.getters.filterList }}</div>


通过辅助函数mapGetters映射

Son2.vue

<hr>
<div>{{ filterList }}</div>import {  mapGetters } from 'vuex'computed: {...mapGetters(['filterList'])},


模块module

在这里插入图片描述




在这里插入图片描述store/modules/user.js

const state = {userInfo: {name: 'slx',age: 18},score: 80
}
const mutations = {}
const actions = {}
const getters = {}export default {state,mutations,actions,getters
}


store/modules/setting.js
const state = {theme: 'light'
}
const mutations = {}
const actions = {}
const getters = {}export default {state,mutations,actions,getters
}


store/index.js
import setting from './modules/setting'modules: {user, setting}


使用模块中的数据 / 模块中state的访问语法

在这里插入图片描述



子模块的状态,还是会挂到根级别的state中属性名就是模块名
在这里插入图片描述

直接通过模块名访问

Son1.js

    <div>{{ $store.state.user.userInfo.name }}</div>

通过mapState映射

默认根级别的映射 …mapState([‘user’, ‘setting’])

Son2.js

<div>{{ user.userInfo.name }}</div>
<div>{{ setting.theme }}</div>
import { mapState } from 'vuex'computed: {...mapState(['user', 'setting']),},

子模块映射 mapState(‘模块名’,['xxx]) +开启命名空间

user.js

export default {namespaced: true,//开启命名空间state,mutations,actions,getters
}


Son2.vue

<div>{{ userInfo.name }}</div>
<div>{{ score }}</div>...mapState('user', ['userInfo', 'score']), //! !!!



使用模块中getters中的数据 / 模块中getters的访问语法

直接通过模块名访问 $store.getters[‘模块名/xxx’]

user.js

const getters = {// 分模块后,state就是子模块的stateUpperName (state) {return state.userInfo.name.toUpperCase()}
}


Son1.vue

<div>{{ $store.getters['user/UpperName'] }}</div>


通过mapGetters映射

在这里插入图片描述

默认根级别映射mapGetters([‘xxx’])

Son2.vue

<div>{{ filterList }}</div>...mapGetters(['filterList'])


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

子模块映射mapGetters(‘模块名’,[‘xxx’])+开启命名空间Son2.vue

<div>{{ UpperName }}</div>...mapGetters('user', ['UpperName']), //! !!!


掌握模块中的mutation调用语法

在这里插入图片描述

直接通过store调用 $store.commit(‘模块名/xxx’,额外参数)

setting.js

const mutations = {setTheme (state, newtheme) {state.theme = newtheme}
}
export default {namespaced: true,state,mutations,actions,getters
}


Son1.vue

        <div>{{ $store.state.setting.theme }}</div><button @click="changeTheme">改主题色</button>
changeTheme () {this.$store.commit('setting/setTheme', 'dark')},

通过mapMutations映射

默认根级别映射mapMutations([‘xxx’])

子模块映射mapMutations(‘模块名’,[‘xxx’])+开启命名空间

setting.js

const state = {theme: 'light',size: 16
}
const mutations = {setTheme (state, newtheme) {state.theme = newtheme},setSize (state, newSize) {state.size = newSize}
}


Son2.vue

<div>{{$store.state.setting.size}}px</div>
<button @click="setSize(90)">改px</button>//真的注意,放在methods里,不是computedmethods: {...mapMutations('setting', ['setSize']),...mapMutations('setting', ['setTheme'])}


## 模块中action的访问语法 ![在这里插入图片描述](https://img-blog.csdnimg.cn/ae6beb82840640eab8df3c6d8d540061.png)

直接通过模块名访问 $store.dispatch(‘模块名/xxx’,额外参数)

Son1.vue

 <button @click="updateTheme2">一秒后更新</button>
methods: {updateTheme2 () {this.$store.dispatch('setting/setThemeSecond', 'orange')},


setting.js
const actions = {setThemeSecond (context, newTheme) {setTimeout(() => {// 调用mutation  context上下文,默认提交的就是自己模块action和mutationcontext.commit('setTheme', newTheme)}, 1000)}
}

在这里插入图片描述

通过mapActions映射

默认根级别映射mapActions([‘xxx’])

子模块映射mapActions(‘模块名’,[‘xxx’])+开启命名空间

Son2.vue

 <button @click="setThemeSecond('black')">一秒后更新主题</button>methods: {...mapActions('setting', ['setThemeSecond'])}

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

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

相关文章

IntelliJ IDEA 2021/2022关闭双击shift全局搜索

我这里演示的是修改&#xff0c;删除是右键的时候选择Remove就好了 IDEA左上角 File-->Settings 找到Navigate -->Search Everywhere &#xff0c;右键添加快捷键。 OK --> Apply应用

初始多线程

目录 认识线程 线程是什么&#xff1a; 线程与进程的区别 Java中的线程和操作系统线程的关系 创建线程 继承Thread类 实现Runnable接口 其他变形 Thread类及其常见方法 Thread的常见构造方法 Thread类的几个常见属性 Thread类常用的方法 启动一个线程-start() 中断…

前端食堂技术周刊第 93 期:7 月登陆 Web 平台的新功能、Node.js 工具箱、Nuxt3 开发技巧、MF 重构方案

美味值&#xff1a;&#x1f31f;&#x1f31f;&#x1f31f;&#x1f31f;&#x1f31f; 口味&#xff1a;橙橙冰萃美式 食堂技术周刊仓库地址&#xff1a;https://github.com/Geekhyt/weekly 大家好&#xff0c;我是童欧巴。欢迎来到前端食堂技术周刊&#xff0c;我们先来…

Android多屏幕支持-Android12

Android多屏幕支持-Android12 1、概览及相关文章2、屏幕窗口配置2.1 配置xml文件2.2 DisplayInfo#uniqueId 屏幕标识2.3 adb查看信息 3、配置文件解析3.1 xml字段读取3.2 简要时序图 4、每屏幕焦点 android12-release 1、概览及相关文章 AOSP > 文档 > 心主题 > 多屏…

理解jvm之对象已死怎么判断?

目录 引用计数算法 什么是引用 可达性分析算法&#xff08;用的最多的&#xff09; 引用计数算法 定义&#xff1a;在对象中添加一个引用计数器&#xff0c;每当有一个地方引用它时&#xff0c;计数器值就加一&#xff1b;当引用失效时&#xff0c;计数器值就减一&#xff1…

文件批量改名高手:轻松删除文件名,仅保留编号!

您是否经常需要对大量文件进行命名调整&#xff1f;是否为繁琐的手动操作而感到厌烦&#xff1f;现在&#xff0c;我们的智能批量文件改名工具为您提供了一种简单而高效的解决方案&#xff01;只需几步操作&#xff0c;您就能轻松删除原有的文件名&#xff0c;仅保留编号&#…

YOLO相关原理(文件结构、视频检测等)

超参数进化(hyperparameter evolution) 超参数进化是一种使用了genetic algorithm&#xff08;GA&#xff09;遗传算法进行超参数优化的一种方法。 YOLOv5的文件结构 images文件夹内的文件和labels中的文件存在一一对应关系 激活函数&#xff1a;非线性处理单元 activation f…

【设计模式】MVC 模式

MVC 模式代表 Model-View-Controller&#xff08;模型-视图-控制器&#xff09; 模式。这种模式用于应用程序的分层开发。 Model&#xff08;模型&#xff09; - 模型代表一个存取数据的对象或 JAVA POJO。它也可以带有逻辑&#xff0c;在数据变化时更新控制器。View&#xff…

Linux6.37 Kubernetes 集群调度

文章目录 计算机系统5G云计算第三章 LINUX Kubernetes 集群调度一、调度约束1.调度过程2.指定调度节点3.亲和性1&#xff09;节点亲和性2&#xff09;Pod 亲和性3&#xff09;键值运算关系 4.污点(Taint) 和 容忍(Tolerations)1&#xff09;污点(Taint)2&#xff09;容忍(Toler…

VSCODE[配置ssh免密远程登录]

配置ssh免密远程登录 本文摘录于&#xff1a;https://blog.csdn.net/qq_44571245/article/details/123031276只是做学习备份之用&#xff0c;绝无抄袭之意&#xff0c;有疑惑请联系本人&#xff01; 这里要注意如下几个地方: 1.要进入.ssh目录创建文件: 2.是拷贝带"ssh-…

微服务系列文章之 Springboot+Vue实现登录注册

一、springBoot 创建springBoot项目 分为三个包&#xff0c;分别为controller&#xff0c;service&#xff0c; dao以及resource目录下的xml文件。 UserController.java 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 …

如何利用 EMC 模型解决能源服务提供商的瓶颈

01. 什么是合同能源管理&#xff1f; 合同能源管理(EMC-Energy Management Contract) 是一种新型的市场化节能机制,其实质就是以减少的能源费用来支付节能项目全部成本的节能投资方式。&#xff1a;节能服务公司与用能单位以契约形式约定节能项目的节能目标&#xff0c;节能服…

正则表达式的使用

1、正则表达式-教程 正则表达式&#xff1a;文本模式&#xff0c;包括普通字符&#xff08;例如&#xff0c;a到z之间的字母&#xff09;和特殊字符&#xff08;称为元字符&#xff09;。 正则表达式使用单个字符串来描述&#xff0c;匹配一系列匹配某个句法规则的字符串。 2、…

《论文阅读13》Efficient Urban-scale Point Clouds Segmentationwith BEV Projection

一、论文 研究领域&#xff1a; 城市级3D语义分割论文&#xff1a;Efficient Urban-scale Point Clouds Segmentationwith BEV Projection清华大学&#xff0c;新疆大学2021.9.19论文github论文链接 二、论文概要 2.1主要思路 提出了城市级3D语义分割新的方法&#xff0c;将…

1.SpringMVC接收请求参数及数据回显:前端url地址栏传递参数通过转发显示在网页

1、SpringMVC 处理前端提交的数据 1.1 提交的域名和处理方法的参数不一致&#xff0c;使用注解解决 1.2 提交的域名和处理方法的参数不一致&#xff0c;使用注解解决 1.3 提交的是一个对象 2、前端url地址栏传递的是一个参数 请求地址url&#xff1a;http://localhost:8080/s…

测试开发工程师到底是做什么的?

一二三线互联网公司对测试开发工程师的要求&#xff1a; 现在很多测试的同事对测试开发工程师的认识都有一定的误差。 我最早在阿里的时候和测试开发工程师沟通的时候&#xff0c;发现阿里的测试开发工程师&#xff0c;他们基本上都分为两种&#xff0c;一种是业务类型的&…

Python基础教程: json序列化详细用法介绍

前言 嗨喽&#xff0c;大家好呀~这里是爱看美女的茜茜呐 Python内置的json模块提供了非常完善的对象到JSON格式的转换。 废话不多说&#xff0c;我们先看看如何把Python对象变成一个JSON&#xff1a; d dict(nameKaven, age17, sexMale) print(json.dumps(d)) # {"na…

【Linux】环境变量

目录 一、环境变量的概念二、 常见的环境变量1.查看环境变量的方法2.PATH3.HOME4.SHELL 三、环境变量的相关指令四、命令行参数 一、环境变量的概念 环境变量(environment variables)一般是指在操作系统中用来指定操作系统运行环境的一些参数 如&#xff1a;我们在编写C/C代码的…

Prometheus技术文档-基本使用-配置文件全解!!!!!

简介&#xff1a; Prometheus是一个开源的系统监控和告警系统&#xff0c;由Google的BorgMon监控系统发展而来。它主要用于监控和度量各种时间序列数据&#xff0c;比如系统性能、网络延迟、应用程序错误等。Prometheus通过采集监控数据并存储在时间序列数据库中&#xff0c;…

【视频】使用OBS将MP4推流至腾讯云直播

1、下载OBS OBS官网:https://obsproject.com/ OBS支持Win、Mac、Linux,如果下载速度很慢,建议使用迅雷下载 2、OBS推流设置 2.1 添加场景 默认会有一个“场景”,如果想继续添加可以点击“+”按钮 2.2 添加媒体源 1)点击“来源”窗口中“+”按钮 2)支持的媒体源如…