Vuex知识点全解析(3)---actions有什么用?

news/2024/7/10 2:10:49 标签: 前端, vue, 面试, javascript

我们已经复习过了state,mutations,getters的相关作用和用法,今天来搞一下actions

actions其实也很简单,我们都知道在想要修改state中的数据,必须要通过mutations,但是mutations是同步的,只能执行同步代码,这显然不能满足所有需求,而actions就是异步的提交mutations,它的作用也是用来修改state的,但是不是直接修改,因为修改state中数据的方法有且只有通过mutations

mutationsactions都是用来修改state的,只是前者是同步修改,后者是异步修改。

JavaScript程序中最直接、最常见的异步操作就是Ajax

我们先npm install axios --save安装一下axios

Ajax的作用是请求后端的数据,那么我们首先要创建一个后端服务,我这里使用nodejs

javascript">const http = require('http');

http.createServer((req, res) => {
    res.setHeader('Access-Control-Allow-Origin', '*')
    res.end(JSON.stringify([
        'data1',
        'data2',
        'data3'
    ]))
}).listen('9999',() => {
    console.log('server running!!!');
})

store/index.js中,我们要先 import axios from 'axios'引入一下axios

然后在actions属性下写入以下内容:

javascript">  actions: {
    getData (ctx) {
      axios.get('http://localhost:9999').then((res) => {
        console.log(res);
      })
    }
  }

我们先不修改state的值,只是简单输出一下获取到的后端数据。

actions的内容编写好之后,我们如何调用它呢?

我们再新建一个Part2组件

<template>
    <div>
    
    </div>
</template>

<script>javascript">
    export default {
        name: 'MyPart2',
        mounted() {
            this.$store.dispatch('getData');
        }
    }
</script>

调用actions的方式之一就是this.$store.dispatch('方法名')

经过实际测试,我们可以正常获取到后端的值。

在这里插入图片描述

那么接下来的要做的就是通过actions提交mutations来修改state中的数据。

方式也很简单,我们在写actions中的方法时,会获得一个默认参数,就是当前的环境上下文ctx,里面就有commit方法。

javascript">  actions: {
    getData (ctx) {
      axios.get('http://localhost:9999').then((res) => {
        console.log(res);
        ctx.commit('setData', res.data);
      })
    }
  }
javascript">  state: {
    curIdx: 0,
    name: 'Ray',
    age: '21',
    data: []
  },
  mutations: {
    setCurIdx (state, index) {
      state.curIdx = index;
    },
    setData (state, data) {
      state.data = data
    }
  },

完成了这一系列操作之后,我们可以直接获取一下state中的data,看看是否正确。

<template>
    <div>
        Data: {{data}}
    </div>
</template>

<script>javascript">
import { mapState } from 'vuex';
    export default {
        name: 'MyPart2',
        mounted() {
            this.$store.dispatch('getData');
        },
        computed: {
            ...mapState(['data'])
        }
    }
</script>

在这里插入图片描述

我们完成了一系列的操作,通过actions执行异步操作,提交mutations修改state数据,然后在视图中进行展示。

QQ:505417246
微信:18331092918
微信公众号:Code程序人生
个人博客:http://rayblog.ltd

在这里插入图片描述


http://www.niftyadmin.cn/n/1576395.html

相关文章

OpenStack制作CentOS7.2.1511镜像

1.下载镜像直接访问官方镜像地址下载&#xff0c;注意选择中国的镜像源&#xff0c;相对国外镜像下载速率比较快&#xff0c;进入后选择版本为7.2.1511&#xff0c;在isos目录下下载x86_64的Minimal镜像.2.创建虚拟机首先需要创建一个qcow2格式镜像文件&#xff0c;用于作为虚拟…

一个系列带你搞定前端面试的手写代码环节(1) ---解析url参数

在大部分的前端面试中&#xff0c;手写代码的环境都是必不可少的&#xff0c;每个人都会准备一些&#xff0c;但是总是准备的不充分&#xff0c;从这个系列开始&#xff0c;我将把前端面试中所有可能遇到的手写代码问题一一总结&#xff0c;欢迎交流补充&#xff01; 解析url参…

MySQL存储汉字

之前在网上查找了很多方法&#xff0c;排在前排的都是修改配置文件my.ini的&#xff0c;没有成功&#xff0c;后来找到了一个解决方法&#xff1a; 在建表的时候&#xff0c;在语句后面加上段“engine innodb default charset gbk”&#xff0c;这样所建的表就可以完整的存储…

一个系列带你搞定前端面试的手写代码环节(2) --- call apply bind

call 改变this指向用的&#xff0c;可以接受多个参数 Function.prototype.myCall function(ctx) {ctx ctx || window; // ctx 就是 objlet fn Symbol();ctx[fn] this; // this就是foolet result ctx[fn](...arguments);delete ctx[fn];return result; } let obj { name: …

一个系列带你搞定前端面试的手写代码环节(3) --- instanceof

instanceof是js内置的一个方法&#xff0c;可以用来判断引用类型的数据。 myInstanceof实现instanceof 接收两个参数&#xff0c;判断第二个参数是不是在第一个参数的原型链上 function myInstanceof(left, right) {// 获取实例对象的原型, 也就是left._proto_let left Object…

全球一半网站已用上 HTTPS:HTTP 加速淘汰

早年&#xff0c;HTTP 协议传输的数据都是未加密的&#xff0c;也就是明文的&#xff0c;因此使用 HTTP 协议传输隐私信息非常不安全。为了保证这些隐私数据能加密传输&#xff0c;网景公司设计了 SSL&#xff08;Secure Sockets Layer&#xff09;协议用于对 HTTP 协议传输的数…

Angular.js路由 简单小案例

代码案例&#xff1a; 1 <html>2 <head>3 <meta charset"utf-8">4 <title>AngularJS 路由实例</title>5 </head>6 <body ng-approutingDemoApp>7 8 <h2>AngularJS 路由应用</h2>9 …

OpenVRLoader 与UnityXR Interaction ToolKit不兼容

1、游戏的VR设备监听与输入都是基于UnityXR,但是当接入OpenVRLoader 时无法正常通过Openvr_xr_plugin去获取设备的输入输出。 2、Openxr 和OpenVRLoader同时打开也还是会没有输入信息。 3、我们需要修改com.unity.xr.interaction.toolkit插件代码,不能直接用packmanage的将插…