vuex之state(一)
我的理解
- 个人认为,不用说得太过深奥,vuex其实就是把一个应用的某些数据统一管理起来,以便其他的组件更方便的操作该数据。
为什么使用vuex
- 当项目结构越来越复杂,组件的多层嵌套使得数据传递非常繁琐,并且难以维护,有了vuex,我们可以把一些数据的状态统一管理起来,通过调用vuex暴漏出来的API,就可以简单方便操作数据。非常方便。
基本使用
- 安装
npm install vuex --save
- 创建store实例
- 我们在我们的项目 创建 一个 store.js 文件,注意在模块化构建系统中,需要调用 Vue.use(Vuex),通过在根实例 vm(new Vue({ store })注册 store,这样根组件的所有子组件都可以$store.state.xxx访问state的数据了。
//这里我引入vue 直接指定了路径 方法不唯一,只要能引入vue即可
import Vue from '../../node_modules/vue/dist/vue.js'
//引入vuex
import Vuex from 'vuex'
//调用 Vue.use()
Vue.use(Vuex)
//创建store实例
const store = new Vuex.Store({
name: "车神-黄杰"
})
//导出 store对象
export default store
- main.js文件
import Vue from '../..//node_modules/vue/dist/vue.js'
import App from './App.vue'
import store from './store.js'
//创建vm实例
const vm = new Vue({
el: '#app',
render(c){
return c(App)
},
//在 vm注册store
store
})
- state
- state就相当于 vue的data,就是定义一些公共的数据,这里的数据每一个组件都可以访问,此时在组件中 可以通过 $store.state.xxxx得到该数据。
//App组件
<template>
<h2>{{name}}</h2>
</template>
<script>
export default {
data(){
return {}
},
computed(){
name(){
return this.$store.state.name
}
}
}
</script>
<style lang="less" scoped></style>
mapState
不通过计算属性返回状态得到数据的方式,直接通过 $store.state.xxx也可以获得数据,只不过当一个组件多处都用到该数据,这样代码就会显得很臃肿,而通过计算属性定义每一个数据也很不方便,因此官方提供 mapState函数来帮助我们更方便的把状态映射成为组件的计算属性。没啥好测试的,直接用官网的例子,有以下几种方式:
传入对象
// 在单独构建的版本中辅助函数为 Vuex.mapState
import { mapState } from 'vuex'
export default {
computed: mapState({
// 箭头函数可使代码更简练
count: state => state.count,
// 传字符串参数 'count' 等同于 `state => state.count`
countAlias: 'count',
// 为了能够使用 `this` 获取局部状态,必须使用常规函数
countPlusLocalState (state) {
return state.count + this.localCount
}
})
}
- 此时计算属性和state的节点名称相同 此时传入一个数组,里面即为state数据名称字符串
computed: mapState([
// 映射 this.count 为 store.state.count
'count'
])
- 当我们想要和局部的计算属性一起使用,使用对象展开运算符...
computed: {
localComputed () { /* ... */ },
// 使用对象展开运算符将此对象混入到外部对象中
...mapState({
//这里的写法与传入对象的写法一致
}),
...mapState([
//这里的写法与传入数组的写法一致
])
}
注意
- 要想 通过this获取局部状态,只能使用常规函数,不能使用箭头函数,我测试了一下,箭头函数中的this为undefined。具体原因是箭头函数this指向问题。有兴趣可以去了解一下。
vuex之state(一)的更多相关文章
- Do not mutate vuex store state outside mutation handlers.
组件代码: selectItem(item,index) { this.selectPlay({ list: this.songs, index }) }, ...mapActions([ 'sele ...
- Vuex基础-State
官方地址:https://vuex.vuejs.org/zh/guide/state.html 由于 Vuex 的状态存储是响应式的,从 store 实例中读取状态最简单的方法就是在计算属性中返回某个 ...
- vuex的state,mutation,getter,action
开始!正常的简单的拆分下是这样的文件当然module可以在store下面新建一个文件夹用来处理单独模块的vuex管理比较合适. 1.index.js下面 import Vue from 'vue' i ...
- vue单页面应用刷新网页后vuex的state数据丢失问题以及beforeunload的兼容性
最近在用vue写h5项目,当使用window.location重定向页面或者刷新当前页面时, 发现当刷新网页后,保存在vuex实例store里的数据会丢失. 后来在网上查找大神的解决方案如下: exp ...
- Vue2实践computed监听Vuex中state对象中的对象属性时发生的一些有趣经历
今天想实现一个功能,在全局中随时改变用户的部分信息.这时候就想到了用Vuex状态控制器来存储用户信息,在页面中使用computed来监听用户这个对象.看似一个很简单的逻辑,就体现了我基本功的不扎实呀. ...
- 在vue组件中使用vuex的state状态对象的5种方式
下面是store文件夹下的state.js和index.js内容 //state.js const state = { headerBgOpacity:0, loginStatus:0, count: ...
- vuex的state选项rootState.js
说明:本文做为vuex学习详细解(主页目录 配置主页:vuex学习配置详解(目录rootState.js文件如下 作用声明 vuex的state选项常量,并导出默认为state /** * 此文件除声 ...
- vuex的state在组件选项data和computed上引用的区别
引用在vue组件的data选项,不因数值被改变而更新引在在vue组件的computed选项,因数值变化而更组件 案例代码如下,调整下引用vue和vuex地址即可展示 <!DOCTYPE html ...
- vue单页面应用刷新网页后vuex的state数据丢失的解决方案
1. 产生原因其实很简单,因为store里的数据是保存在运行内存中的,当页面刷新时,页面会重新加载vue实例,store里面的数据就会被重新赋值. 2. 解决思路一种是state里的数据全部是通过请求 ...
- 前端 vue单页面应用刷新网页后vuex的state数据丢失的解决方案(转载)
最近接手了一个项目,前端后端都要做,之前一直在做服务端的语言.框架和环境,前端啥都不会啊. 突然需要前端编程,两天速成了JS和VUE框架,可惜还是个半吊子.然后遇到了一个困扰了一整天的问题.一直调试都 ...
随机推荐
- 002 ceph的deploy部署
介绍:前期对ceph有一个简单的介绍,但是内容太大,并不具体,接下来使用ceph-deploy部署一个Ceph集群,并做一些运维管理工作,深入的理解Ceph原理及工作工程! 一.环境准备 本次使用的虚 ...
- MySQL之非空约束(NOT NULL)
定义: MySQL非空约束(NOT NULL)可以通过 CREATE TABLE 或 ALTER TABLE 语句实现.在表中某个列的定义后加上关键字 NOT NULL 作为限定词,来约束该列的取值不 ...
- bootstrap:导航下拉菜单
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <meta name ...
- .Net Core - AgileHttp
2020年新年将至,先预祝.Net Core越来越好. 做了这么多年一线开发,经常跟Http打交道.比如调用三方的Webservice,比如集成微信支付的时候服务端发起Prepay支付.特别是现在分布 ...
- Java类成员之属性
属性含义:对应类中的成员变量. 语法格式:修饰符 数据类型 属性名 = 初始化值; 1.修饰符常用的有权限修饰符(private.default.protected.public) 以及其他修饰符(s ...
- 悄摸直播 —— JavaCV实现本机摄像头画面远程直播
目录 前言 需要的jar包和依赖 需要实现的模块(附带源码教程) 项目效果展示 前言 最近想用Java实现一个类似于远程直播的功能 像这样:(功能示意图) 需要的jar包和依赖 Maven依赖: &l ...
- springboot2 + grpc
项目情况: springboot: 2.2.2 grpc-spring-boot-starter: 2.6.1.RELEASE 项目目录: mypro: - person - grpc服务端 - l ...
- Babel+vscode实现APICloud开发中兼容ES6及以上代码
本文出自APICloud官方论坛, 感谢论坛版主 penghuoyan 的分享. 使用APICloud开发时,考虑到兼容问题一直使用ES5开发,时间越久感觉越落后,整理了一个兼容ES6的开发环境, ...
- 安装SQL的时候,设置用户权限失败
在安装sql的时候,遇到一个问题: 在查看报表明细中,提示: 就是这三个: 首先确保你是使用管理员用户安装的,如果还不行,运行 secpol.msc 进入本地安全策略 把自己的用户名加入进来就好了.
- ntelliJ IDEA添加注释常用的快捷键
IDEA可以使用快捷键添加行注释Ctrl+/.块注释Ctrl+Shift+/,还可以快速生成类注释.方法注释等,下面就介绍这几种快捷键的用法