vuex的action

什么是action

Action 类似于 mutation,不同在于:

  • Action 提交的是 mutation,而不是直接变更状态。
  • Action 可以包含任意异步操作

总结来说action就是处理异步任务,mutations是处理同步

我们通常使用action请求一些异步任务,比如一些初始化全局数据等等。

 

 Vue-cli的代理跨域

我们先回顾一下关于请求

新建一个app.js文件

我们用express服务处理请求任务

npm install --save -dev express

1 const express=require("express");
2 const app=new express();
3 app.get("/add",function(req,res){
4     res.send({a:1})
5 })
6 app.listen(3000,()=>{
7     console.log("监听3000端口")
8 })

此时打开浏览器可以看到

 

 

现在我们遇到了一个问题,node返回的接口是3000端口,但是我们的项目起的8080端口,此时势必会遇到跨域的问题

我们使用代理跨域解决跨域的请求问题

我们的vue-cli3给我们留个一个后门,我们可以通过配置一个vue.config.js文件来配置相关的项目配置,命名必须是vue.config.js,目录位置也必须是根目录

 

 

 

我们需要给vue.config.js文件配置哪些内容?

答案是:我们要配置跨域的相关内容, 我们使用代理跨域

vue.confog.js代码

 

配置或者修改了这个文件的代码需要重新启动项目服务

 1 module.export={
 2     devServer:{
 3         // 配置代理跨域
 4         Proxy:{
 5              // "/"指的是哪些请求会触发代理跨域,/指的是任意的请求都会触发
 6             "/":{
 7                   // target指的是代理地址,我们需要代理请求的地址
 8                 target:"http://127.0.0.1:3000",
 9                 changeOrigin:true,
10                 pathRewrite:{
11                     '^/':''
12                 }
13             }
14         }
15     }
16 }

 

我们利用axios插件服务我们完成请求任务

axios地址:http://www.axios-js.com/

Axios 是一个基于 promise 的 HTTP 库,可以用在浏览器和 node.js 中

 

我们在项目中引入axios

npm instal --save -dev axios

安装成功后,我们在main.js文件中引入和注册axios

1 import axios from "axios"
2 Vue.prototype.$http=axios

通过都是用$http代表请求任务的

App.vue文件

 1 <template>
 2 <div>
 3     {{b}}
 4     <button @click="addServer">按我加服务那么多数字</button>
 5 </div>
 6 </template>
 7 
 8 <script>
 9 export default {
10     data() {
11         return {
12             b: 100
13         }
14     },
15     methods: {
16         addServer() {
17             this.$http.get('/add').then((res) => {
18                 if (res.status == 200) {
19                     this.b += res.data.a
20                 }
21                 // this.b += res.a
22             })
23         }
24     }
25 }
26 </script>
27 
28 <style lang="scss" scoped>
29 
30 </style>

 

 

 

Vuex发送action请求

我们看一个请求加服务数字的案例

App.vue

 1 <template>
 2 <div>
 3     <p>{{$store.state.a}}</p>
 4     <button @click="addServer">点击通过发送action请求修改全局的store</button>
 5 </div>
 6 </template>
 7 
 8 <script>
 9 export default {
10     methods: {
11         addServer() {
12             this.$store.dispatch('addServer')
13         }
14     }
15 }
16 </script>
17 
18 <style lang="scss" scoped>
19 
20 </style>

和mutations不同的是action发送的是dispatch请求,dispatch就是用来处理异步任务的

store.js

 1 import axios from 'axios'
 2 export default {
 3     state: {
 4         a: 1
 5     },
 6     mutations: {
 7         add(state, { a }) {
 8             state.a += a
 9         }
10     },
11     actions: {
12         addServer({ commit }) {
13 
14             // 处理异步请求
15             axios.get("add").then(res => {
16                 if (res.status == 200) {
17                     commit("add", { a: res.data.a })
18                 }
19             })
20         }
21     }
22 }

actions处理异步任务,处理完后通过发送commit任务,mutations进行修改state,这个没有违背state只能是mutation修改的宗旨

 

posted @ 2021-09-20 15:45  keyeking  阅读(916)  评论(0编辑  收藏  举报