———————————-(VUE拾壹)————————————-

VUEX=day8_19

一、VUEX初认知

是vue提供的一个跨组件的缓存的组件 像是服务端的redis*

(1.1) 如何工作:

与redis基本相同,但它是全局的,因此可以定义方法供全局调用,拿来操作缓存用的

(1.2) 什么地方用到

在vue-cli的store里存储

数据需要在多个组件(页面)间共享的数据

比如token 用户信息 window.localStorage*

(1.3) @/store进行引用

  1. _@是什么?_
  2. _vue定义的路径变量_
  3. _为什么定义?_
  4. _代码位置变了 引用路径不用变_
  5. _因为我们引用的方法是通过相对路径,所以只要使用绝对路径,那么不管他怎么便_
  6. _都可以找到_

二、自定义vue路径变量

  1. const path = require("path");
  2. module.exports={
  3. devServer:{
  4. port:80
  5. },
  6. //如果是发布的去掉.map
  7. productionSourceMap: process.env.NODE_ENV === 'production' ? false : true,
  8. configureWebpack: (config) => {
  9. config.resolve = { // 配置解析别名
  10. extensions: ['.js', '.json', '.vue'],
  11. alias: {
  12. '@': path.resolve(__dirname, './src'),
  13. 'components': path.resolve(__dirname, './src/components'),
  14. 'common': path.resolve(__dirname, './src/common'),
  15. 'api': path.resolve(__dirname, './src/api'),
  16. 'router': path.resolve(__dirname, './src/router'),
  17. 'views': path.resolve(__dirname, './src/views'),
  18. 'data': path.resolve(__dirname, './src/data'),
  19. 'public': path.resolve(__dirname, 'public'),
  20. 'static': path.resolve(__dirname, 'static'),
  21. }
  22. }
  23. },
  24. }

三、为什么用VUEX

1. 因为组件之间,兄弟组件和父子组件之间需要传递,我们是同过绑定的方式进行传值

  1. _但是如果没有父子关系,传值十分麻烦_

2.考虑使用redis

3.共享数据区域:所有的组件包括实例都可以直接访问的一块数据区域

  1. _特点:_
  2. 牵一发而动全身 A=> a=1 <= B C D (a=1)*
  3. _B=> a=2 <= A C D (a=2)_

四、UVEX使用

1.在main.js中注册

  1. import Vue from 'vue'
  2. import App from './App.vue'
  3. import router from './router'
  4. //注册
  5. import store from './store'
  6. window.vm= new Vue({
  7. //注册
  8. store,
  9. }).$mount('#app')
  10. //我们指定了替代#app标签

2.在store文件下的index.js注册与定义

  1. import Vue from 'vue'
  2. import Vuex from 'vuex'
  3. Vue.use(Vuex)
  4. export default new Vuex.Store({
  5. state: {
  6. a:1,
  7. b:2
  8. },
  9. mutations: {
  10. setA(state,...value){
  11. console.log(value)
  12. state.a=value
  13. }
  14. },
  15. getters:{
  16. //state不是我们定义的实参,是vue给我们的
  17. getA:state=> state.a
  18. },
  19. })

(2.1) state 变量存储的容器

(2.2) getters 定义用来获取state的值的方法,避免直接获取state

(2.3)mutations 定义用来操作state的值的方法,避免直接操作state

3.使用

(3.1)script导入

  1. <script>
  2. //mapState与mapMutations对应store下面的mutations与state
  3. import {mapState,mapMutations} from 'vuex'
  4. export default {
  5. methods:{
  6. //后面是别名 前面才是store中定义的setA
  7. ...mapMutations({setA:'setA'})
  8. // ...mapMutations(['setA'])
  9. }
  10. ,computed:{
  11. // ...mapState({a:'a',b:'b'})
  12. ...mapState(['a','b'])
  13. }
  14. }
  15. </script>

(3.2)组件中直接使用

  1. <template>
  2. <div id="app">
  3. <fieldset>
  4. <legend>VUEX</legend>
  5. <!-- $代表某些实例 -->
  6. {{$store.state}}
  7. {{$store.getters.getA}}
  8. <button type="button" @click="$store.commit('setA',{a:1,a:2})">修改X</button>
  9. <button type="button" @click='setA(Date.now())'>修改X1</button>
  10. <!-- <button type="button" @click="$store.commit('setA',{a:1,a:2})">修改X1</button> -->
  11. </fieldset>
  12. <router-view/>
  13. </div>
  14. </template>