zoukankan      html  css  js  c++  java
  • vuex

    https://vuex.vuejs.org/zh/

    Vuex 是一个专为 Vue.js 应用程序开发的状态管理模式,Vuex是实现组件全局状态(数据)管理的一种机制,可以方便的实现组件之间的数据共享。如果您不打算开发大型单页应用,使用 Vuex 可能是繁琐冗余的。如果您的应用够简单,最好不要使用Vuex。

    使用Vuex管理数据优势:

    • 能够在vuex中集中管理共享的数据,便于开发和后期进行维护
    • 能够高效的实现组件之间的数据共享,提高开发效率
    • 存储在vuex中的数据是响应式的,当数据发生改变时,页面中的数据也会同步更新

    4.2、vuex核心概念

    vuex对象中通过state来存储状态,除了state以外还有用来操作state中数据的方法集,以及当我们需要对state中的数据需要加工的方法集等等成员。

    成员列表:

    • state 存放状态  => mongodb/mysql
    • mutations state成员操作  model=》操作 增删改  同步操作
    • getters 加工state成员给外界 =》 查
    • actions 异步操作     =》 操作 增删改   ajax
    • modules 模块化状态管理

    vuex工作流程

    首先,Vue组件如果调用某个VueX的方法过程中需要向后端请求时或者说出现异步操作时,需要dispatch VueX中actions的方法,以保证数据的同步。可以说,action的存在就是为了让mutations中的方法能在异步操作中起作用。

    如果没有异步操作,那么我们就可以直接在组件内提交状态中的Mutations中自己编写的方法来达成对state成员的操作。不建议在组件中直接对state中的成员进行操作,这是因为直接修改(例如:this.$store.state.name = 'hello')的话不能被VueDevtools所监控到。最后被修改后的state成员会被渲染到组件的原位置当中去。

    使用vuex到项目

    如果你在vue-cli创建项目时没有勾选vuex选项,则需要手动安装

    cnpm i -S vuex

    使用

    src目录下面创建一个store目录

    创建统一数据状态管理 在store里面创建index.js文件

    import Vue from 'vue'
    import Vuex from 'vuex'
    Vue.use(Vuex)
    import {INCR_COUNT}from './constant'
    export default new Vuex.Store({
      // 统一状态数据源 可以是所有的vue组件中的数据都可以存储在这里,当前此处只是一个临时,刷新就没有了
      // 数据源
      state:{
        count:100
      },
      // 类似于计算属性
      getters:{
        getCount(state){
          return state.count + '万(W)'
        }
      },
      // 同步处理的方法,它会直接操作state数据源
      mutations:{
        // 此处的名称要和commit参数1的名称要一致
        // 如果是一个变量,要想转为字符串,需要使用[]括起来就行了
        [INCR_COUNT](state,payload){
          state.count += payload
        }
      }
    })

    src/main.js中的对于new Vue实例与vuex状态进行关联

    在store文件夹新建constant.js文件 在index中已经引入的文件

    // 资产增长量
    export const INCR_COUNT = 'incr2'

    在组件中写入

    <template>
      <div>
        <div>我的存款:{{ $store.getters.count }}</div>
        <hr>
        <Child></Child>
      </div>
    </template>
    
    <script>
    import Child from './Child'
    export default {
      components:{
        Child
      },
      data() {
        return {};
      },
      mounted() {
        
      },
    };
    </script>

    在Child子组件

    <template>
      <div>
        我是子组件:{{$store.getters.getCount}}
        <br>
        {{getCount}}
        <br>
        state:{{count}}
        <br>
        <button @click="incr">财产增加</button>
      </div>
    </template>
    
    <script>
    import {INCR_COUNT}from '../../store/constant'
    // 写在计算属性中
    import {mapGetters,mapState} from 'vuex'
    
    export default {
      data() {
        return {}
      },
      computed:{
        // 开始是这样写的
        /*
        ...mapGetters({
          getCount:"getCount"
        })
        可以简化成下面这个样子
        */
       ...mapGetters(['getCount']),
       ...mapState(['count'])
      },
      methods:{
        incr(){
          // 可以直接修改
          // this.$store.state.count = 200
          // 发送同步的命令,让全局状态修改
          // 参数1 命令名称
          // 参数2 命令传的参数,可选
          // this.$store.commit('ince')
          this.$store.commit(INCR_COUNT,100)
        }
      }
    }
    </script>
    这样你在一个组件点财产增加另一个也会变
    右侧打赏一下 代码改变世界一块二块也是爱
  • 相关阅读:
    PHP中cookie和会话编程
    PHPweb应用程序开发技巧
    javascript中DOM编程
    PHP动态创建Web站点
    在IE下FLASH背景透明而在FF下不透明的解决方法
    ThinkPHP返回插入记录的id号
    PHP面向对象编程
    PHP smarty编程总结
    Linux用户权限设置
    无法载入 mcrypt 扩展,请检查 PHP 配置
  • 原文地址:https://www.cnblogs.com/ht955/p/14271478.html
Copyright © 2011-2022 走看看