vue整合vuex

只谈情不闲聊 提交于 2020-04-06 10:38:29
  1. 什么是Vuex

2.vue如何整合vuex

  • 步骤一:在使用vue create 创建项目时,需要选择vuex组件(因为个人创建项目时已经保存了模板所以已经不用去勾选了)。

  • 步骤二:将创建src/store/index.js文件,用户存放状态(数据)

3.vuex组成

  • vue脚手架自动创建内容
exportdefaultnewVuex.Store({
state:{
},
mutations:{
},
actions:{
},
modules:{
}
})
  • state,vuex状态,也就是数据。(不允许直接修改,只能读)
  • mutations,修改,用于修改数据。
  • actions,用于操作mutations,运行发送ajax。

3.1. state使用
1)如何声明变量,用于存储数据

importVuefrom'vue'
importVuexfrom'vuex'
Vue.use(Vuex)
exportdefaultnewVuex.Store({
state:{//状态,用于存放数据,类似data区域
count:0
},
mutations:{
},
actions:{
},
modules:{
}
})

2)如何在其他组件中,使用vuex的数据
this.$store表示操作vuex
this.$store.state表示操作vuex的state区域

<script>
exportdefault{
created(){
//获得vuex中的数据
console.info(this.$store.state.count)
},
}
</script>

3.2. mutations使用

1)如何在mutations定义函数,修改state的值

importVuefrom'vue'
importVuexfrom'vuex'
Vue.use(Vuex)
exportdefaultnewVuex.Store({
state:{//状态,用于存放数据,类似data区域
count:0
},
mutations:{
//声明updateCount函数,修改count的值
updateCount(state,value){
state.count=value
}
},
actions:{
},
modules:{
}
})


2)如何在其他组件中,执行mutations定义的函数

<script>
exportdefault{
created(){
//获得vuex中的数据
console.info(this.$store.state.count)
//修改vuex中的数据,通过mutations
this.$store.commit('updateCount',100)
//获得vuex中的数据
console.info(this.$store.state.count)
},
}

4. vuex简化操作

  • vuex提供mapState和mapMutations对vuex操作进行简化
<template>
<div>
结果:{{count}},<inputtype="button"@click="updateCount(10)"value="更改">
</div>
</template>
<script>
import{mapState,mapMutations}from'vuex'
/*
mapState内部定义的函数,用于从vue的state区域获得数据
mapState(数组),数组表示需要获得哪些数据,将返回一个对象
43
电话:0527-809655550527-80961111网址:www.czxy.com
{数组元素:值,数值元素:值}
实际使用中,将结果存放到计算属性处(computed),需要将对象...解构后存放
*/
exportdefault{
computed:{
/*
count(){
returnthis.$store.state.count
}
*/
...mapState(['count'])
},
methods:{
/*
updateCount(value){
this.$store.commit('updateCount',value)
}
*/
...mapMutations(['updateCount'])
},
}
</script>
<style>
</style>

5. 案例:用户登录

  • 步骤一:检查后端,登录成功后,将用户信息返回

  • 步骤二:修改store/index.js添加user变量,并提供updateUser进行数据修改
importVuefrom'vue'
importVuexfrom'vuex'
Vue.use(Vuex)
exportdefaultnewVuex.Store({
state:{
user:null//存储用户登录的信息
},
mutations:{//用于修改用户数据
updateUser(state,value){
state.user=value
}
},
actions:{
},
modules:{
}
})

 

  • 步骤三:前端用户登录成功,将数据保持vuex中(使用mutations修改数据)
<template>
<div>
<h1>用户登录表单</h1>

<!--table>tr*3>td*2-->
<tableborder="1">
<tr>
<td>用户名</td>
<td><inputtype="text"v-model="user.username"></td>
</tr>
<tr>
<td>密码</td>
<td><inputtype="password"v-model="user.password"></td>
</tr>
<tr>
<tdcolspan="2">
<inputtype="button"@click="loginFn"value="用户登录">
</td>
</tr>
</table>
<spanstyle="color:red">{{msgError}}</span>
</div>
</template>
<script>
//从api.js解构login
import{login}from'../api'
//#1从vuex获得映射函数
import{mapMutations}from'vuex'
exportdefault{
data(){
return{
user:{
'username':'',
'password':''
},
msgError:''
}
},
methods:{
asyncloginFn(){
//登录操作
let{data}=awaitlogin(this.user)
//判断
if(data.code==1){
debugger
//#3登录成功,调用updateUser设置用户数据到vuex中
this.updateUser(data.other.user)
47
电话:0527-809655550527-80961111网址:www.czxy.com
//成功
this.$router.push('/home')
}else{
this.msgError=data.message
}
},
//#2解构对应操作函数
...mapMutations(['updateUser'])
},
}
</script>
<style>
</style>

 

  • 步骤四:修改App.vue,使用vuex简化版(映射方式)获取vuex中的user数据
<template>
<divid="app">
<!--#3有数据显示-->
<divv-if="user!=null">
欢迎{{user.username}}登录
</div>
<divv-else>
<router-linkto="/register">用户注册</router-link>|
<router-linkto="/login">用户登录</router-link>
</div>
<!--路由视图-->
<router-view/>
</div>
</template>
<script>
//#1导入vuex映射
import{mapState}from'vuex'
exportdefault{
//#2解构需要使用变量
computed:{
...mapState(['user'])
},
}
</script>
<style>
</style>

6. vuex多用户登录,会不会数据冲突?
     •不会冲突
     •vuex可以理解成全局变量,每一个浏览器各自的变量。
     •不同的用户不会出现共享。
     •vuex在组件之间共享数据。
     •使用vuex常见问题,浏览器刷新时,数据丢失了。
          –内部是一个变量,当前页面如果没有对变量重新赋值,刷新后数据应该丢失的。

 

 

感谢各位兄弟姐妹阅读!!! 

 

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!