Vuex集中式状态管理架构

-简单介绍:

vuex是一个专门为Vue.js设计的集中式状态管理架构。
我们把它理解为在data中需要共享给其他组件使用的部分。 Vuex和单纯的全局对象有以下不同: 、Vuex 的状态存储是响应式的。当vue组件从store中读取状态的时候,
  若store中的状态发生变化,那么相应的组件也会相应的得到高效更新。 、你不能直接改变store中的状态。改变store中的状态的唯一途径就是显示的
  提交(commit)mutation。这样使得我们可以方便的跟踪每一个状态的变化,
  从而让我们能够实现一些工具来帮助我们更好的了解我们的应用。 、或者可以说,它就是前端里面简单替代数据库来存储数据的一个架构;

- 安装使用:

  - npm直接下载:npm install vuex

  - 使用:

// main.js
import Vue from 'vue'
import App from './App'
import router from './router'
import vuex from 'vuex' Vue.use(vuex) Vue.config.productionTip = false const store = new vuex.Store({
state: {
show: false,
}
}); new Vue({
el: '#app',
router,
store,
components: { App },
template: '<App/>'
});

  - 将vuex解耦出来,放到src文件夹下的store.js文件里面:

// store.js

import Vue from 'vue'
import Vue_x from "vuex" Vue.use(Vue_x); export default new Vue_x.Store({
state: {
show: false,
},
}); // main.js
import Vue from 'vue'
import App from './App'
import router from './router'
import store from "./store" Vue.config.productionTip = false; new Vue({
el: '#app',
router,
store,
components: { App },
template: '<App/>'
});

  - Vuex.Store 对象中存在的三个属性:state,getters,mutations

    - state:保存我们data中需要共享的数据

      - 获取state中的数据最好的方法是使用 计算属性,因为计算属性可以存在内存中,读取速度快,正常的data 也可获取;

      - 获取state的语法:this.$store.state.count

      - 示例:

// 创建组件
const Counter = {
template: `<div>{{ count }}</div>`,
// 计算属性 computed
computed: {
count(){
return this.$store.state.count
}
}
};

    - getters:该属性对应的是一个对象,对象中存放函数,该函数的返回值会保存在内存中,但是,当函数中的依赖关系发生改变时,它的返回结果会随之改变;类如计算属性;

      - 获取getters中对应的函数的值:this.$store.getters.自定义函数名

- 示例:

import Vue from 'vue'
import Vue_x from "vuex" Vue.use(Vue_x); export default new Vue_x.Store({
state: {
count: 20,
},
// 通过 this.$store.getters.my_func
getters: {
my_func: function (state) {
return state.count * 2
},
// 通过 this.$store.getters.my_func_count
my_func_count: function (state, getters) {
return getters.my_func.length
}
}, });

    - mutations:当想让store中的state的值的发生变化时,需要提交mutation中定义了的函数,才可发生变化;(更改store中的状态的方法)

      - 每个mutations对应的函数都需要接收 一个字符串的事件类型(type),和一个回调函数handler。

      - 触发mutations中的函数的语法:this.$store.commit('定义的函数', 函数需要的值);

      - 示例:

import Vue from 'vue'
import Vue_x from "vuex" Vue.use(Vue_x); export default new Vue_x.Store({
state: {
count: 20,
},
// 需要通过 this.$store.commit('increment', 10)
mutations: {
increment (state, n) {
// 变更状态
state.count += n
}
} });

      - mutations需要遵守Vue的响应规则

既然vuex中的store中的状态是响应式的,那么当我们状态变更时,监视状态的vue组件也会更新。

这就意味着vuex中的mutation也需要与使用vue一样遵守一些注意事项:

  -- 1,最好提前在你的store中初始化好所有的所需要的属性

  -- 2,当对象需要添加属性时,你应该使用

      --  Vue.set(obj, 'newProp', 123)

      --  以新对象代替老对象  state.obj = { ...state.obj, newProp: 123}

axios   (Ajax)

- 介绍:

基于Promise的HTTP请求客户端,可以同时在浏览器和node.js使用。

基本上就是又进行了一层封装的ajax

- 安装:

npm install axios -D

- 基本配置:

  - 在Vue对象中加载 axios : Vue.prototype.$axios = axios

// main.js
import Vue from 'vue'
import axios from "axios" Vue.prototype.$axios = axios

  - 正常的 axios请求 基本上绑定在组件中的方法中;也就是用在 组件对象中的 methods属性中绑定的各种方法里面;例如,绑定点击事件发送GET请求到后台

// 组件对象:

{
name: "Home",
data(){
return {
test: ""
}
},
methods: {
my_click: function (){
// 改变仓库中的数据
this.$store.commit("sale", "一块钱包年~~")
},
// 绑定的点击事件:
course_click: function () {
// 这里需要注意 this的问题,axios支持链式操作,
// 在操作中的this 会丢失当前对象,将当前对象提前赋值,好在后面继续使用
let that = this;
this.$axios.request({
url: "http://127.0.0.1:8000/test/", // url: 发送到后台的地址;
method: "get"              // method: "发送的方式";
}).then(function (data) {         // then: 当请求成功返回后执行这个函数;
console.log(data.data);
console.log(this);
that.test = data.data
}).catch(function (data) {         // catch: 当请求失败返回时执行这个函数;
console.log(data)
})
}
}, }

- this.$axios 中的 get,post,request,以及发送多个请求的方法all:

  - get请求:

// 组件中的 methods:
// this.$store.state.apiList.course = url信息
// params: 路径上附带的参数 ?id=123 test(){
this.$axios.get(this.$store.state.apiList.course,{
params: {
id: 123,
}
}).then(function (response) {
// 请求成功回调函数
}).catch(function (response) {
// 请求失败的回调函数
})
}

  - post 请求:

// 组件中的 methods:
// this.$store.state.apiList.course = url信息
// {course_title:"Python"}... post请求的请求体数据 test(){
this.$axios.post(this.$store.state.apiList.course,{
course_title: "Python",
course_price: "19.88"
}).then(function (response) {
// 请求成功回调函数
}).catch(function (response) {
// 请求失败的回调函数
})
}

  - request 请求方法:

// this.$axios.request({}) 方法中需要传入url 和method

methods: {
init(){
var that = this
this.$axios.request({
url: that.$store.state.apiList.course,
method: 'get'
}).then(function (data) {
if (data.status === 200){
that.courseList = data.data
}
}).catch(function (reason) {
console.log(reason)
})
}
},

  - all: 并发发送多个请求:

// 定义多个请求,将定义好的函数 放到数组中,当成参数传到下面的函数里
// 在组件中的methods中 用 this.$axios.all([请求1,请求2]) 函数 发过去;
// then() 接受成功执行;
// catch() 接受失败后执行; function getCourse(){
return this.$axios.get('/course/12')
}
function getCourse_all() {
return this.$axios.get('/course')
}
this.$axios.all([getCourse_all(),getCourse()])
.then().catch()

Vuex与axios介绍的更多相关文章

  1. Vuex、axios、跨域请求处理和import/export的注意问题

    一.Vuex 1.介绍 vuex是一个专门为Vue.js设计的集中式状态管理架构. 对于状态,我们把它理解为在data中需要共享给其他组件使用的部分数据. Vuex和单纯的全局对象有以下不同: 1. ...

  2. Vuex、axios以及跨域请求处理

    一.Vuex 1.介绍 vuex是一个专门为Vue.js设计的集中式状态管理架构. 对于状态,我们把它理解为在data中需要共享给其他组件使用的部分数据. Vuex和单纯的全局对象有以下不同: 1. ...

  3. 基于Vue+Vuex+Vue-Router+axios+mint-ui的移动端电商项目

    第一步:安装Node 1.打开NodeJS的官网,下载和自己系统相配的NodeJS的安装程序,包括32位还是64位一定要选择好,否则会出现安装问题. 下载地址:https://nodejs.org/e ...

  4. Vuex以及axios 看这个

      vuex  -- 安装   npm i vuex  -- 配置   -- 导入vuex      import vuex from "vuex"   -- vue使用vuex  ...

  5. Vue基于vuex、axios拦截器实现loading效果及axios的安装配置

    准备 利用vue-cli脚手架创建项目 进入项目安装vuex.axios(npm install vuex,npm install axios) axios配置 项目中安装axios模块(npm in ...

  6. vue全家桶router、vuex、axios

    main.js import Vue from 'vue' import App from './App' import router from './router' import store fro ...

  7. 使用vue2.x+webpack+vuex+sass+axios+elementUI等快速搭建前端项目框架

    一.本文将分享如何快速搭起基于webpack+vue的前端项目框架,利用vue的自己的脚手架工具vue-cli搭建起基本的环境配置,再通过npm包管理工具引入相应的依赖来完善项目的各种依赖框架.下面是 ...

  8. 已配置好的vue全家桶项目router,vuex,api,axios,vue-ls,async/await,less下载即使用

    github 地址: https://github.com/liangfengbo/vue-cli-project 点击进入 vue-cli-project 已构建配置好的vuejs全家桶项目,统一管 ...

  9. Vuex以及axios

    Vuex 简介 vuex是一个专门为Vue.js设计的集中式状态管理架构. 状态? 我们把它理解为在data中需要共享给其他组件使用的部分. Vuex和单纯的全局对象有以下不同: 1.Vuex 的状态 ...

随机推荐

  1. es6模块化导入导出

    模块化指的就是将一个大程序拆分成若干个互相依赖的小文件,然后在用简单的方法拼装起来. 在 ES6 之前,JS没有模块化系统,社区制定了一些模块加载方案 最主要的有 CommonJS(Asynchron ...

  2. 多线程Thread类的方法

    创建多个线程的第一种方法 1.定义一个Thread类的子类,比如MyThread类 2.重写Thread的run方法,设置线程任务 3.创建Mythread类的对象 4.调用方法start(),开启新 ...

  3. GeoGlobe Server使用问题收集

    本人在做数字县区过程中,需要吉奥GeoGlobe Server发布数据,期间遇到些平台问题.故立此帖,作为参考. 1 字段限制: GeoGlobe 5.2部署在我的服务器Windows Server ...

  4. Silverlight程序之修改命名空间

    有时候,为了使用已有的代码,可能需要更改主程序的命名空间,以生成新的应用.修改命名空间,不能胡乱一通全部使用“替换”,否则程序可能无法正常运行.通过笔者实践,主要有以下几个地方需要注意(以WebGIS ...

  5. 设计前沿:16款扁平风格 iOS 7 图标设计

    最新发布的 iOS 7 抛弃了曾经倍受追捧的拟物化设计,采用扁平化,极简设计的界面.对于 iOS 平台来说,采用没有阴影的平面设计其实是有道理的.以前的屏幕分辨率有限,必要的阴影可以填补小尺寸,分辨率 ...

  6. 判断以及防止SQL注入

    SQL注入是目前黑客最常用的攻击手段,它的原理是利用数据库对特殊标识符的解析强行从页面向后台传入.改变SQL语句结构,达到扩展权限.创建高等级用户.强行修改用户资料等等操作. 那怎么判断是否被SQL注 ...

  7. SpringBoot - 资源文件配置读取

    Examp1:读取核心配置文件信息application.properties的内容 方法一:使用@Value方式(常用) 1.application.properties中自定义参数 test.ms ...

  8. java实现excel生成和导出

    1.java生成excel 2.java读取excel内容

  9. jq的dom操作

    代码可以在该网址测试:www.w3school.com.cn/tiy/t.asp?f=jquery_manipulation_detach_move attr 使用函数来设置属性/值:函数参数为选择器 ...

  10. 自制rpm包

    参考自:https://blog.csdn.net/u010384744/article/details/80929319 https://blog.csdn.net/samxx8/article/d ...