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框架,可惜还是个半吊子.然后遇到了一个困扰了一整天的问题.一直调试都 ...
随机推荐
- 【转载】你不知道的 console,让 JS 调试更简单
对于前端工程师,肯定不会对console陌生,但是,又能深入了解多少呢? Chrome控制台-开发者工具 windows按F12, MAC按Command + Option + C或Command + ...
- 初入webpack
为什么需要构建工具? 通过caniuse我们了解到 现代浏览器对es6特性的支持程度: 由于现代浏览器对es6特性的支持度并不能说太高,为了兼容所以需要进行 es6语法的转换,除了此,三大框架的语法特 ...
- HDU3555 Bomb 题解 数位DP
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3555 题目大意:求 \([1,n]\) 范围内有多少数包含"49". 解题思路: ...
- 「洛谷P2891」[USACO07OPEN]吃饭Dining 解题报告
P2891 [USACO07OPEN]吃饭Dining 题目描述 Cows are such finicky eaters. Each cow has a preference for certain ...
- docker安装mtproto及报错解决方案
安装docker:curl -sSL https://get.daocloud.io/docker | sh 给权限:usermod -aG docker [current_user] 启动:syst ...
- three.js入门第一个案例
准备工作 1.运用three.js进行3d开发,其实和页面编程一样,首先需要在html文件中引入three.js.Three.js使用面向对象的方式来构建程序,它包含3个基本对象: 场景(scene) ...
- 结巴分词 java 高性能实现,是 huaban jieba 速度的 2倍
Segment Segment 是基于结巴分词词库实现的更加灵活,高性能的 java 分词实现. 变更日志 创作目的 分词是做 NLP 相关工作,非常基础的一项功能. jieba-analysis 作 ...
- 你还不会Git?那就不要写代码了(一)
Git应用开发学习 如果你还不会使用Git,那就不要写代码了. 一旦你会使用了Git,就再也不想使用SVN了.永远也回不去了. Mac上使用Git,肯定离不开对Mac上的操作.就要使用常用的Linux ...
- axios中请求传值方式
日常开发中与后端联调,可能需要的数据不同,所传值也有所不同 1.如果是data方式,设置请求头为:并且直接返回data就可以 raw axios.defaults.headers['Content- ...
- Tarjan求割点和桥
by szTom 前置知识 邻接表存储及遍历图 tarjan求强连通分量 割点 割点的定义 在一个无向图中,如果有一个顶点集合,删除这个顶点集合以及这个集合中所有顶点相关联的边以后,图的连通分量增多, ...