vuex 入门使用教程

2023-10-30

简单使用(存和取)

  1. 创建:

    在js文件里创建仓库:

    import Vue from 'vue'
    import Vuex from 'vuex'
    
    //挂载Vuex
    Vue.use(Vuex)
    
    //创建VueX对象
    const store = new Vuex.Store({
        state:{
            //存放的键值对就是所要管理的状态
            name:'helloVueX'
        }
    })
    
    export default store
    
  2. 使用:
    使用$store.state.value获取相应值

    在组件方法中使用:

    methods:{
        add(){
          console.log(this.$store.state.name)
        }
    },
    

    在计算属性中使用:

    computed: {
        count () {
          return this.$store.state.name
        }
      }
    
  3. 高级使用:

    使用在计算属性中使用...mapState

    computed: {
        ...mapState({
            name: state => state.store.name,
            sex: state => state.store.sex
            // 可以直接用this访问
        })
    }
    
    

Mutations

mutations操作数据的方法的集合,比如对该数据的修改、增加、删除等等

  1. 创建

    const store = new Vuex.store({
        state:{
            name:'helloVueX'
        },
        mutations:{
            //state是当前VueX对象中的state
            //payload是参数
            edit(state,payload){
                Vue.set(state,"age",payload.age) // 修改(不存在则新增)
                Vue.delete(state,'age')	//删除
            }
        }
    })
    
  2. 使用:

    this.$store.commit('edit',{age:15,sex:'男'})
    

    this.$store.commit({
        type:'edit',
        payload:{
            age:15,
            sex:'男'
        }
    })
    
  3. 注意:在修改和删除中要使用Vue提供的方法,否则Vue不能对数据进行实时响应

  4. 高级使用

    可以解构到methods中,方便使用:

    methods: {
        ...mapMutations({
            add: 'increment' // 将 `this.add()` 映射为 `this.$store.commit('increment')`
        })
    }
    
    

Getters

可以对state中的成员加工后传递给外界

  1. 创建

    getters:{
        //state 当前VueX对象中的状态对象
    	//getters 当前getters对象,用于将getters下的其他getter拿来用
        nameInfo(state){
            return "姓名:"+state.name
        },
        fullInfo(state,getters){
            return getters.nameInfo+'年龄:'+state.age	//获取上面那个getter
        }  
    }
    
  2. 使用:

    this.$store.getters.fullInfo
    
  3. 高级使用

    计算属性使用...mapGetters

    computed: {
        ...mapGetters({
          // 把 `this.doneCount` 映射为 `this.$store.getters.doneTodosCount`
          doneCount: 'doneTodosCount'
        })
    }
    

Actions

mutation不能异步,所以提供了Actions来专门进行异步提交mutation方法。(action可以在异步操作出结果后再提交给mutation)

  1. 创建

    //context 上下文(相当于箭头函数中的this)对象
    //payload 参数
    actions:{
        aEdit(context,payload){
            return new Promise((resolve,reject)=>{
                //promise里面是异步提交
                setTimeout(()=>{
                    context.commit('edit',payload)
                    resolve()
                },2000)
            })
        }
    }
    
  2. 使用

    this.$store.dispatch('aEdit',{age:15})
    
  3. 高级使用

    同样可以解构到methods,分别使用

    methods: {
       ...mapActions({
          add: 'increment' // 将 `this.add()` 映射为 `this.$store.dispatch('increment')`
        })
    }
    
    

    看懂上面之后,再看这张图就没有压力了:
    vuex

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

vuex 入门使用教程 的相关文章

  • zone.js:140未捕获类型错误:无法读取属性“删除”

    我是 kendo ui 的新手 我在小提琴中开发了原型 删除确认窗口在那里工作正常 但是当我集成到我的代码库中时 我收到错误 Cannot read property remove at the line pai to delete rem
  • jQuery JSONP ajax,未设置身份验证标头

    我正在尝试使用以下设置向 google 联系人 API 发出 ajax 请求 ajax url https www opensocial googleusercontent com api people me all dataType js
  • Vue - 仅在第一个操作完成后调用异步操作

    我需要从组件内部调用 2 个操作 但第二个操作只能在第一个操作 100 完成其工作后才开始 我正在尝试这个 但它不起作用 mounted this store dispatch coinModule loadApiCoins then gt
  • 绑定 popstate 事件不起作用

    我尝试在浏览器的控制台中输入以下代码 window onpopstate function alert 1 然后单击后退按钮 没有显示任何警报 难道我做错了什么 或者是否不允许将 popstate 事件绑定到控制台的页面 使用 Chrome
  • Pug 从模板内的另一个文件调用 js 函数

    我花了将近四个小时都无法解决这个问题 而且我找不到任何针对此类问题的有用文档 这就是问题 我正在使用 pug jade 模板 我想调用 pug 模板内的函数来转换一些数据 这是主要模板 main template section each
  • 为什么 Promise `.then` 方法的回调是反模式

    我在 StackOverflow 上看到了答案 人们建议为 AngularJS 服务提供回调函数 app controller tokenCtrl function scope tokenService tokenService getTo
  • 解释一下这个令人困惑的 dojo 教程声明语法

    我正在阅读使用的语法道场的声明 http dojotoolkit org documentation tutorials 1 8 declare 用于班级创建 描述很混乱 The declare function is defined in
  • 在动态创建的元素的onclick函数的属性中传递一个字符串

    我试图在动态创建的锚元素的 onClick 事件处理函数的参数中传递一个字符串 请参阅小提琴http jsfiddle net shmdhussain bXYe4 http jsfiddle net shmdhussain bXYe4 我无
  • 指定 HTML5 输入类型 = 日期的值输出?

    我想将本机日期选择器添加到我的应用程序中 该应用程序当前使用遗留的本地系统 日期输入支持尚未广泛普及 但如果我可以基于兼容性提供这两种实现 那就太理想了 有没有办法指定 HTML 日期选择器给出的值的输出 歌剧的默认设置是yyyy mm d
  • 替换img路径jquery

    我正在尝试替换 jquery 中的 img 路径 注入远程页面 replaceexample com thumbs withexample com images 我已经尝试过这个 但似乎不起作用 img attr src replace t
  • 修复 Raphaël 路径节点上 Tipsy 工具提示的位置

    这是一个非常具体且有些复杂的问题 所以我设置了一个最小测试用例 http reveal dk 8080 revealit dk tipsytest 在阅读本文的其余部分之前 您可能应该先了解一下 我的页面显示悬停时突出显示区域的图像Raph
  • 为什么这个递归函数返回未定义?

    我正在尝试编写一个使用递归组合两个字符串的函数 我的代码如下 但我不知道为什么该函数返回未定义 特别是当我在基本情况下使用 console log 时 它不会打印未定义而是打印正确的值 var str3 function merge str
  • 是否有跨浏览器的方式在Javascript中设置style.float?

    通常 如果您需要在 JavaScript 中设置样式属性 您可以这样说 element style attribute value 虽然略有不同 但属性名称通常与 HTML 属性名称类似 尽管是驼峰式 对我来说问题是 float 属性不起作
  • iPhone 上的锁定方向 UIWebView

    有没有办法锁定 UIWebView 的方向 使用 Obj C JS 还是 Html 我不想有按钮或任何东西 我只想在应用程序打开时将其锁定为纵向 好像这个堆栈溢出帖子 https stackoverflow com questions 43
  • JS:修改 JS 对象中的值/对

    我正在尝试找出修改对象的最佳方法 而无需三次写出类似的对象 所以我有这三个对象 var object1 start start end end type 1 var object2 start start end end type 2 va
  • chrome 选项卡/窗口中的 window.open 行为

    我有一小段 javascript 旨在打开两个或更多选项卡 这在 FF 和 IE 中工作正常 但 chrome 会在新窗口而不是选项卡中打开第二个窗口 它不依赖于 url 因为我已经尝试过使用两个相同的 url 第一个在选项卡中打开 第二个
  • 如何禁用网页中的萤火虫?

    如何使用 Javascript 禁用 firebug 我想这样做是为了向访问者隐藏我的网页的运作方式 有什么选择可以做到这一点吗 你不能 你能做的最好的事情就是混淆你的 JavaScript 实际上刮掉了 您能做的最好的事情就是将所有安全关
  • D3 强制布局,较大的节点聚集在中心

    我一直在修改将用于标签云的强制布局 每个标签都由一个
  • 如何得知客户端从服务器的下载速度?

    根据客户的下载速度 我想以低质量或高质量显示视频 任何 Javascript 或 C 解决方案都是可以接受的 Thanks 没有任何办法可以确定 您只能测量向客户端发送数据的速度 如果没有来自客户端的任何类型的输入来表明其获取信息的速度 您
  • jQuery appendTo(), json 在 IE 6,7,8 中不起作用

    我这两天绞尽脑汁想找到解决办法 我使用 jQuery ajax 从数据库中获取值 以便在另一个框发生更改时更新一个框 php 脚本从数据库中获取值 然后输出 json 它在 FF 中工作正常 但在所有版本的 IE 中 选择框都不会更新 我已

随机推荐