vue2面试题——vuex

1. Vuex有哪些属性

state ==> 全局共享属性

getters ==> 针对于state数据进行二次计算

mutations ==> 存放同步方法的

actions ==> 存放异步方法的,并且是用来提交mutations的

modules ==> 把vuex再次进行模块的划分(进行细分,便于项目的维护)

import vue from 'vue'
import Vuex from 'vuex';
Vue.use(Vuex)
export default new Vuex.Store({state:{/*放置全局共享属性*/},getters: {/*类似于计算属性*/},mutations: {/*用于存放同步方法的*/},actions: {},modules: {}
})

2. Vuex使用state值

this.$store.state.xxx

辅助函数:mapState

以上两种方式都可以拿到state,区别是什么

1. 使用this.$store.state.xxx是可以直接修改vuex的state数据的

2. 使用辅助函数的形式,是不可以修改的

/*这是store文件夹下面的index.js文件*/
import vue from 'vue'
import Vuex from 'vuex';Vue.use(Vuex)export default new Vuex.Store({state:{str: '123'},getters: {/*类似于计算属性*/},mutations: {},actions: {},modules: {}
})/*在任意一个文件内我们都可以使用它*/
1. 直接使用
<h1>{{ this.$store.state.str }}</h1>
<button @click='btn'>修改str的值</button>
methods:{btn(){/*这种方式可以直接修改state里面数据的值*/this.$store.state.str = 'xxxxxx'}
}
2. 利用辅助函数使用
<template><div>{{ str }}</div><button @click='btn'>修改str的值</button>
</template>
import { mapState } from 'vuex'
export default {computed: {...mapState(str)}methods:{btn(){/*这种写法是错误的,不可以直接修改state里面数据的值,因为mapState其实就相当于从store的index里面复制了一份str给当前组件,用this.str='xxx'去修改并没有实际修改到store文件夹里面的内容*/// this.str = 'xxxxxx'}}
}

3. Vuex的getters值修改

getters是不可以修改的

/*这是store文件夹下面的index.js文件*/
import vue from 'vue'
import Vuex from 'vuex';Vue.use(Vuex)export default new Vuex.Store({state:{str: '123'},getters: {changeStr(str){return state.str + 'x';}},mutations: {},actions: {},modules: {}
})/*在任意一个文件内我们都可以使用它*/
1. 直接使用
<h1>{{ this.$store.getters.changeStr }}</h1>
2. 利用辅助函数使用
<template><div>{{ changeStr }}</div>// <input type="" name="" v-model='changeStr'> /*这样写是有问题的,因为v-model是mvvm,其中mv,也就是数据到视图,而changeStr是不支持修改的,所以这样写一旦输入框内容发生变化就会报错*/
</template>
import { mapGetters } from 'vuex'
export default {computed: {...mapGetters(['changeStr'])}
}

4. Vuex的matations和actions区别

相同点:mutations和actions都是用来存放全局方法的,它们都拿不到return值

区别:mutations ==》 同步

           actions ==> 异步的,返回的是一个Promise对象,它可以执行相关异步操作

/*index.js文件*/
import Vue from 'vue'
import Vuex from 'vuex'
Vue.use(Vuex)
export default new Vuex.Store({state: {number: 1,},getters: {},mutations: {add(number){state.number += 2;}},actions: {addNumber({commit, state}){state.number += 4;}},modules: {}
})
/*在任意一个文件内我们都可以使用它*/
<template><div>{{ this.$store.state.number }}</div><button @click='add'>点击增加+2</button><button @click='addNumber'>点击增加+4</button></template>
import { mapMutations, mapActions } from 'vuex'
export default {methods: {...mapMutations(['add']),...mapActions(['addNumber'])}
}

5. Vuex的modules

store文件夹下——>新建modules文件夹,与index.js平级——>新建user.js文件
/*user.js文件*/
export default {state: {token: 'kjhgfeuiohg',}
}/*index.js文件*/
import vue from 'vue'
import Vuex from 'vuex';
Vue.use(Vuex)
import user from './modules/user'
export default new Vuex.Store({state:{},getters: {},mutations: {},actions: {},modules: {user}
})
/*在任意一个文件内我们都可以使用它*/
1. 直接使用
<h1>{{ this.$store.state.user.token }}</h1>
2. 利用辅助函数使用
<template><div>{{ token }}</div>
</template>
import { mapState } from 'vuex'
export default {computed: {...mapState({token: state=>state.user.token})}
}

6. Vuex持久化存储

Vuex本身不是持久化存储数据的,它本身是一个状态管理仓库,state是一个全局属性,Vuex就是一个存放全局属性的一个地方而已。

如果想实现持久化存储的话,有两种方式:

1. 自己写本地存储

2. 使用插件

/*使用插件*/
1. 下载安装插件
yarn add vuex-persistedstate 或 npm install --save vuex-persistedstate
2. 配置使用插件
/*index.js文件*/
import vue from 'vue'
import Vuex from 'vuex';
import createPersistedState from 'vuex-persistedstate'
Vue.use(Vuex)
import user from './modules/user'
export default new Vuex.Store({state:{},getters: {},mutations: {},actions: {},modules: {user},/*vuex持久化存储的配置*/plugins:[createPersistedState({storage: window.sessionStorage, // 存储方式:localStorage,sessionStorage,cookieskey: "store", // 存储key的key值render(state){return {...state} // 要存储的数据}})]
})

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

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

相关文章

查看哪个docker环境在占用gpu

前言 有时候发现某些docker占用gpu资源却没有训练&#xff0c;需要查清楚是哪个并且把它stop掉。 方法 在docker里面用nvidia-smi命令&#xff0c;没有pid显示&#xff0c;需要在外面使用。得到pid信息后&#xff0c;使用命令 docker top 15766f6eeaf7(容器ID) | grep 551…

gin框架中使用session的详细步骤和示例

gin框架中的Session是通过中间件Middleware的方式来使用的&#xff0c; 官方的gin-contrib提供了session包&#xff08;通过对github.com/gorilla/sessions的二次封装实现&#xff09;&#xff0c;我们可以直接使用即可&#xff0c; session支持的存储方式有如下多种&#xff1…

书酒共舞:品味文字之韵,沉醉酒香之境

在喧嚣的都市中&#xff0c;我们常常渴望找到一片宁静的角落&#xff0c;让心灵得到片刻的休憩。此刻&#xff0c;一杯雷盛红酒与一本心仪的书籍&#xff0c;便成了很好的伴侣&#xff0c;它们相互映衬&#xff0c;共同编织出一幅优雅的画卷&#xff0c;让我们在品味中感受文字…

分支策略指南 | 发布分支、基于主干的分支、功能分支等常见分支策略利弊分析、版本控制工具Perforce Helix Core全新轻量级分支功能解析

对于希望加快工作流程、按时完成任务并减少代码错误的团队来说&#xff0c;拥有专用的分支策略至关重要。但是&#xff0c;面对各种不同的分支策略&#xff08;包括发布分支、基于主干的分支、功能分支等&#xff09;&#xff0c;如何确定哪一种分支策略更符合团队需求&#xf…

第十六站:Java珊瑚红——Web开发的活力之源

Java在Web开发领域扮演着极其重要的角色&#xff0c;其生态系统提供了多种技术来构建高效、可维护的Web应用程序。下面我们将通过源代码示例&#xff0c;来探讨Servlet、JSP、Spring MVC和RESTful API在Java Web开发中的应用。 Servlet Servlet是Java EE规范的一部分&#xf…

数据处理神器Elasticsearch_Pipeline:原理、配置与实战指南

文章目录 &#x1f4d1;引言一、Elasticsearch Pipeline的原理二、Elasticsearch Pipeline的使用2.1 创建 Pipeline2.2 使用 Pipeline 进行索引2.3 常用的 Processor 三、实际应用场景3.1 日志数据处理3.2 数据清洗和标准化3.3 数据增强 四、最佳实践4.1 性能优化4.2 错误处理4…

Java面试题:Redis为什么速度快

Redis为什么速度快 Redis是纯内存操作 采用单线程,避免不必要的上下文切换可竞争条件 多线程还要考虑线程的安全问题 使用I/O多路复用模型,非阻塞IO I/O多路复用模型 因为Redis是纯内存操作,执行速度非常快,性能的瓶颈是网络延迟而非执行速度 I/O多路复用模型主要就是实…

全球视角下的网络安全法规

在全球范围内&#xff0c;网络安全法规的发展已成为各国政府关注的焦点。随着互联网的快速发展和信息技术的广泛应用&#xff0c;网络安全问题日益凸显&#xff0c;为此&#xff0c;各国纷纷出台了相应的网络安全法律法规&#xff0c;以应对不断演变的网络威胁并维护网络空间的…

Fusion WAN:企业出海与全球组网的数字网络底座

众多中国企业与品牌正将目光投向海外市场&#xff0c;积极寻求发展新机遇&#xff0c;并且在这一过程中取得了显著的成果。"出海"战略已经成为一些企业转型升级的关键选择。 随着国内市场的竞争日益激烈&#xff0c;越来越多的企业开始寻求海外市场的拓展&#xff0c…

@NestedConfigurationProperty注解嵌入配置类不生效

问题 在SmsProperties中嵌入AliyunSmsProperties&#xff0c;在代码中通过SmsProperties读取AliyunSmsProperties的配置为null导致无法启动。两个配置类如下&#xff1a; Data ConfigurationProperties(prefix "sms") public class SmsProperties {NestedConfigur…

11年之约 聚焦上海 | 亚信科技邀您相约2024 MWC上海展

关于亚信安慧AntDB数据库 AntDB数据库始于2008年&#xff0c;在运营商的核心系统上&#xff0c;服务国内24个省市自治区的数亿用户&#xff0c;具备高性能、弹性扩展、高可靠等产品特性&#xff0c;峰值每秒可处理百万笔通信核心交易&#xff0c;保障系统持续稳定运行超十年&a…

深入理解PHP命名空间

在PHP项目中&#xff0c;命名空间&#xff08;namespace&#xff09;是一个非常重要的特性。它不仅帮助开发者组织代码&#xff0c;还能避免类、函数、常量等命名冲突问题。本文将详细介绍PHP命名空间的概念、使用方法和最佳实践。 一、什么是命名空间&#xff1f; 命名空间…

淘客返利平台的前端架构与优化

淘客返利平台的前端架构与优化 大家好&#xff0c;我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编&#xff0c;也是冬天不穿秋裤&#xff0c;天冷也要风度的程序猿&#xff01; 在当前互联网时代&#xff0c;淘客返利平台已经成为电商生态的重要组成部分。为…

windows@局域网或蓝牙文件传输@共享文件夹@就近共享

文章目录 windows系统下的简单共享文件方案&#x1f47a;就近共享设置共享文件夹(推荐)方法1:使用shrpubw程序引导创建方法2:使用图形界面创建右键设置共享文件夹 查看所有已经共享的文件夹&#x1f47a;停止某个文件的共享 共享文件夹的访问控制补充匿名访问问题&#x1f60a;…

10个国内免费AI绘画网站汇总【2024最新】

迎战MidJourney和Stable Diffusion&#xff1a;10款国产AI绘画神器&#xff0c;让你轻松创作出超凡艺术品&#xff01;不论你是初学者还是资深艺术家&#xff0c;这些AI绘画平台都能帮你轻松入门。快来探索这些AI绘画网站&#xff0c;释放你的创意潜能&#xff01; 1、AI绘画创…

MapStruct参数拷贝

我们先看看前面的部分代码 Override public UserDto getUserById(Integer userId) {User user userDaoService.getById(userId);UserDto userDto new UserDto();BeanUtils.copyProperties(user, userDto);return userDto; } 我们上面代码里面可以看到&#xff0c;处理参数和…

【Android】AppCompatSeekBar只扩大触摸区域而外观不变

实现方案&#xff1a; 首先&#xff0c;SeekBar布局如下&#xff0c;不直接调整SeekBar的尺寸&#xff0c;而是为其添加一个包裹的FrameLayout作为透明覆盖层。 <FrameLayoutandroid:id"id/touch_overlay"android:layout_width"wrap_content" <!--…

flex属性中的flex-grow、flex-shrink、flex-basis

flex-grow 属性 flex-grow 属性用于设置或检索弹性盒子的扩展比率。 默认值为0&#xff0c;表示不伸展。 flex-grow属性值为0时&#xff0c;不伸展&#xff1a; <!doctype html> <html lang"en"><head><style>.d-flex {display: flex;width…

python学习 - 设计模式 - 组合模式

组合模式 Composite , 将对象组组合成树形结构以表示’部分-整体’ 的层次结构.组合模式使得用户对单个对象的组合对象的使用具有一致性 #!/usr/bin/python # -*- coding:UTF-8 -*- # File : d1.py # Software: PyCharm""" 组合模式 Composite , 将对象组组…

C语言——链表专题

乐观学习&#xff0c;乐观生活&#xff0c;才能不断前进啊&#xff01;&#xff01;&#xff01; 我的主页&#xff1a;optimistic_chen 我的专栏&#xff1a;c语言 点击主页&#xff1a;optimistic_chen和专栏&#xff1a;c语言&#xff0c; 创作不易&#xff0c;大佬们点赞鼓…