Vuex的基础知识

==============================================================================
Talk is cheap,Show me the code(来自Linus)

父数据传进子数据:props:{}

把vuex的代码用重新创建的文件夹store(仓库的意思)来装,再创建一个文件index.js

vuex作用:
1、可以进行集中式储存管理,或者是状态管理模式、
2、用vuex进行管理是可以做到响应式的,响应式就是当数据改变时,页面会自动刷新
3、并不是所有数据或状态都放进vuex里面进行管理,
4、当数据或状态需要多组件共享的时候才放进去,或者是层级关系比较复杂的时候需要放进去


单界面到多界面状态管理切换:
在这里插入图片描述
在这里插入图片描述


官方关于Vuex管理的图例:
1、不能在components里面直接修改State(状态的意思)的值要按下面步骤来修改
2、假如直接修改State的话会绕过Devtools这个浏览器插件,这个插件可以记录每一次传输数据或状态的情况,有他做记录方便后面维护的时候,知道哪一步传输的时候出现错误,如果绕过这个插件会导致后期排除错误的时候异常艰难
3、Actions里面是进行异步操作的,Mutations(转变的意思)里面是进行同步操作的,Devtools插件也只能记录同步操作

Backend(后端的意思)
frontend(前端的意思)
在这里插入图片描述


使用vuex进行集中式数据管理:
要先安装浏览器插件:vue devtools
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

app.vue代码:

<template>
  <div id="app">
  <h2>------------------app内容-----------------</h2>
  <h2>{{$store.state.counter}}</h2>//要使用$store.state.counter来获取vuex里面的共享数据
  <button @click="counteradd">+</button>
  <button @click="countersub">-</button>
  <h2>------------------hellovuex内容-----------------</h2>
  <hellovuex/>
  </div>
</template>

<script>
import hellovuex from './components/hellovuex'
export default {
  name: 'App',
  components:{
    hellovuex
    },
    methods: {
      counteradd(){
        this.$store.commit('increment')//通过提交mutations来实现调用方法
      },
       countersub(){
        this.$store.commit('decrement')
      },
    },
  data(){
    return{
    }
  }

}
</script>

<style>

</style>

main.js代码:

import Vue from 'vue'
import App from './App'
import store from './store'

Vue.config.productionTip = false
// vue.prototype.$store=store挂载的时候相当于执行了这一步,在原型上添加,所有人都可以有$store这个方法
/* eslint-disable no-new */
new Vue({
  el: '#app',
  store,//挂载store
  render: h => h(App)
}

store里面的index.js代码:

import vue from 'vue'
import vuex from 'vuex'

//1、安装插件
vue.use(vuex)
 
//2、创建对象
const store=new vuex.Store({
    state:{
          counter:1000           
    },
    mutations:{//里面放方法,注意mutations要加s
        increment(state){
            state.counter++
        },
       decrement(state){
            state.counter--
        }
    }

})
//3、导出对象
export default store

=================================================================================================

vuex-state单一状态树的理解:
vuex五大核心概念:
1、State
2、Getters ----类似计算属性
3、Mutation
4、Action
5、Moudle

单一状态树也叫单一数据源:就是一个项目里面只使用一个store来储存所有需要共享的状态信息

=================================================================================================

vuex-getters的使用方法:
filter()过滤方法,里面的s装着students,通过箭头函数来进行判断自定义的规则就像 “>20”

1、当需要将state中的状态信息进行修改后才获取的话,
可以先在getter里面定义方法,处理完之后在外面通过$store.getter.自定义方法名来获取

在这里插入图片描述

2、传递参数,还可以传getters参数:
在这里插入图片描述

3、当需要传入自定义参数时需要在getters的函数里面返回一个函数:
在这里插入图片描述

===============================================================================================

vuex-mutations的携带参数:
可以传普通参数,也可以传对象
在这里插入图片描述
在这里插入图片描述

放在store的index.js的mutations的方法里面:
在这里插入图片描述

放在app.vue的methods的方法里面:
在这里插入图片描述


vuex-mutations不同的提交封装:
!!!当你以第二种特殊风格提交封装的时候,直接写变量名时会有影响的,
!!!当他去到mutations里面调用的时候,传进去的不再是一个变量,而是一个对象,也可以说是一个payload(载荷/负载)

app.vue中的methods:
在这里插入图片描述
store中的index.js中的mutations:
在这里插入图片描述

调用的方法:
在这里插入图片描述

=================================================================================================

vuex的响应式原理:

1、每个属性的背后都会有一个watcher 用来观察它是否有变化
2、想后续把状态信息添加到state上的话需要用到两个方法:
写在mutations的自定义函数里面
vue.set(对象,key,value)
vue.delete(对象,key,value*可选)
3、每一次调用都需要在.vue文件的方法里面进行commit提交才能调用mutations的方法
在这里插入图片描述

在这里插入图片描述


vuex-mutations的类型常量:

1、当导出的对象的时候export后面没有default的话,不能直接使用import导入
2、要使用import { } from ‘文件路径’ 导入
3、新建一个文件来对mutations的方法名字做一个统一管理,把mutations里面的方法名写成常量
4、无论是哪里使用都要先提前导入文件,而且是用import { } from ‘文件路径’ ,因为不是default

在store文件夹里面自定义统一管理名称的文件:
在这里插入图片描述
app.vue:
在这里插入图片描述
store里面的mutations:
使用常量要加 [ ]
在这里插入图片描述

================================================================================================

vuex-actions的的使用详解:

补充:在mutations里面不要进行异步操作,它不会更新内部的state状态信息
           因为devtools不能很好地追踪这个操作什么时候完成

!!actions于mutations类似但是actions可以处理异步请求,mutations不能

1、dispatch发布:在使用actions的方法的时候要使用dispatch而不是commit管理图有说

2、传进的参数也不一样,是context和payload ,context相当于是$store

3、进行完actions操作后要在方法里面进行commit提交,提交的是mutations里面的方法,不然不能使用devtools进行记录


actions里面的函数可以返回一个promise来进行异步请求:
在这里插入图片描述

在app.vue的方法里面进行替换,所以then()是写在app.vue的方法里面:
在这里插入图片描述

===============================================================================================

vuex-modules的使用详解:
modules里面也有五大核心,只是modules核心很少再嵌套

1、模块内的state核心:

index.js:
在这里插入图片描述
app.vue获取他的元素:

  <h2>{{$store.state.a.name}}</h2>

2、modules内的mutations核心:
注意事项:
1、模块的mutations里面的方法名不要起跟root_mutations的方法名一样
2、payload是载荷用于传自定义值
3、只要是提交到mutations就只需要直接commit不需要加模块名

模块中的mutations:
在这里插入图片描述
methods中的方法:
在这里插入图片描述
直接监听就行:

 <button @click="Nameupdate">修改名字</button>

3、modules内的getters核心:

主要的是要有return ,参数有三种state、getters、rootstate
在这里插入图片描述
直接通过下面的方式调用,不需要加modules名:
在这里插入图片描述


4、modules内的actions核心:
modules里面actions的context参数可以使用的属性:以下6个
具体使用:context.getters
在这里插入图片描述

1、modules内actions中的context只是对模块内有作用,于store内的不同,不等同于$store
2、commit仅作用于当前模块的mutations
在这里插入图片描述

1、一样要用dispatch来发布modules中actions内的方法来调用
2、然后modules中的actions中要commit提交modules中的mutations内的方法

app.vue中methods内定义的方法:
在这里插入图片描述

直接监听事件调用方法:
在这里插入图片描述

补充:context对象的解构写法
在这里插入图片描述

在这里插入图片描述

=================================================================================================

项目代码的重构:
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

关于getters核心:!!!return 后面不用加上store.
重构代码的时候排查的错误
在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值