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.hqwc.cn/news/66218.html

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

相关文章

【electron】electron安装过慢和打包报错:Unable to load file:

文章目录 一、安装过慢问题:二、打包报错&#xff1a;Unable to load file: 一、安装过慢问题: 一直处于安装过程 【解决】 #修改npm的配置文件 npm config edit#添加配置 electron_mirrorhttps://cdn.npm.taobao.org/dist/electron/二、打包报错&#xff1a;Unable to load…

计算机竞赛 python 机器视觉 车牌识别 - opencv 深度学习 机器学习

1 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 &#x1f6a9; 基于python 机器视觉 的车牌识别系统 &#x1f947;学长这里给一个题目综合评分(每项满分5分) 难度系数&#xff1a;3分工作量&#xff1a;3分创新点&#xff1a;3分 &#x1f9ff; 更多资…

Jenkins+Docker+SpringCloud微服务持续集成项目优化和微服务集群

JenkinsDockerSpringCloud微服务持续集成项目优化和微服务集群 JenkinsDockerSpringCloud部署方案优化JenkinsDockerSpringCloud集群部署流程说明修改所有微服务配置 设计Jenkins集群项目的构建参数编写多选项遍历脚本多项目提交进行代码审查多个项目打包及构建上传镜像把Eurek…

go.sum are different when using go mod vendor/download

本地Golang配置 今天本地编译一个项目&#xff0c;遇到以下错误 PS D:\Code\Golang\jiankunking\k8s-ext> go mod tidy go: downloading github.com/huaweicloud/huaweicloud-sdk-go-obs v3.23.4incompatible verifying github.com/gin-gonic/ginv1.7.3: checksum mismat…

时序预测 | Matlab实现基于RF随机森林的电力负荷预测模型

文章目录 效果一览基本介绍模型描述源码设计学习小结参考资料效果一览 基本介绍 时序预测 | Matlab实现基于RF随机森林的电力负荷预测模型 电力负荷预测是指通过对历史电力负荷数据分析,来预测未来某个时间段内的电力负荷需求。这项预测对于电力系统的运行和调度至关重要,可以…

2023年国赛数学建模思路 - 复盘:光照强度计算的优化模型

文章目录 0 赛题思路1 问题要求2 假设约定3 符号约定4 建立模型5 模型求解6 实现代码 建模资料 0 赛题思路 &#xff08;赛题出来以后第一时间在CSDN分享&#xff09; https://blog.csdn.net/dc_sinor?typeblog 1 问题要求 现在已知一个教室长为15米&#xff0c;宽为12米&…

h3c radius认证测试

客户端ssh连接上交换机进行管理&#xff0c;用radius里面的用户名和密码进行登陆 dis current-configuration vlan 1 vlan 2 interface Vlan-interface1 ip address 192.168.0.105 255.255.255.0 interface Vlan-interface2 ip address 192.168.60.244 255.255.255.0 interfac…

.netcore grpc服务端流方法详解

一、服务端流式处理概述 客户端向服务端发送请求&#xff0c;服务端可以将多个消息流式传输回调用方和客户端流相反&#xff0c;客户端流发出请求&#xff0c;服务端可以传输一批消息给客户端&#xff0c;直至本次请求响应完全结束。针对文件分段传输下载&#xff0c;该方式非…

【算法——双指针】LeetCode 283 移动零

题目描述&#xff1a; 思路&#xff1a; (双指针) O(n)O(n)O(n) 给定一个数组 nums&#xff0c;要求我们将所有的 0 移动到数组的末尾&#xff0c;同时保持非零元素的相对顺序。 如图所示&#xff0c;数组nums [0,1,0,3,12]&#xff0c;移动完成后变成nums [1,3,12,0,0] &am…

易服客工作室:PressMart – 现代Elementor WooCommerce WordPress商城主题

PressMart是现代且独特的 Elementor WooCommerce WordPress商城主题。它配备了高品质的 05 预建主页&#xff0c;适合任何在线商店&#xff0c;如时装店、电子产品商店、家具店等。 我们使用 Elementor – 一个拖放页面构建器&#xff0c;不需要用户的编码技能即可轻松编辑和构…

Java课题笔记~ SpringMVC概述

1.1 SpringMVC简介 SpringMVC 也叫Spring web mvc。是Spring 框架的一部分&#xff0c;在Spring3.0 后发布的。 1.2 SpringMVC的优点 基于MVC 架构 基于 MVC 架构&#xff0c;功能分工明确。解耦合。 容易理解&#xff0c;上手快&#xff0c;使用简单 就可以开发一个注解…

如何在 Spring Boot 中集成日志框架 SLF4J、Log4j

文章目录 具体步骤附录 笔者的操作环境&#xff1a; Spring Cloud Alibaba&#xff1a;2022.0.0.0-RC2 Spring Cloud&#xff1a;2022.0.0 Spring Boot&#xff1a;3.0.2 Nacos 2.2.3 Maven 3.8.3 JDK 17.0.7 IntelliJ IDEA 2022.3.1 (Ultimate Edition) 具体步骤 因为 …