coderwhy老师vue.js b站视频教程笔记——第三部分

Vuex和axios两部分

目录

06.(掌握)Vuex概念和作用解析

07.(掌握)Vuex单界面到多界面状态管理切换(属性共享)

08.(掌握)vuex-devtools和mutations(方法共享)

09.(掌握)vuex-state单一状态树的理解

10.(掌握)vuex-getters的使用详解

11.(掌握)vuex-mutations的携带参数

12.(掌握)vuex-mutations的提交风格

13.(掌握)vuex-数据的响应式原理

14.(掌握)vuex-mutations的类型常量

15.(掌握)vuex-actions的使用详解

16.(掌握)vuex-modules使用详解

17.(掌握)vuex-store文件夹的目录组织

09day

01.(了解)网络请求模块的选择-axios

02.(掌握)axios框架的基本使用

03.(掌握)axios发送请求和发送并发请求

04.(掌握)axios配置信息相关

05.(掌握)axios实例和模块封装

06.(掌握)axios的拦截器的使用


06.(掌握)Vuex概念和作用解析

1.概念:Vuex是一个专门为Vue.js应用程序开发的状态管理模式。

2.理解:状态管理,这里的状态可以理解为一个变量的改变,能引起多个组件的改变,传统的方法可以通过Vue.prototype.myobj = myObj自己进行状态管理,但是这不能响应式:

3.管理什么状态?

    1)如果你做过大型开放,你一定遇到过多个状态,在多个界面间的共享问题。

    2)比如用户的登录状态、用户名称、头像、地理位置信息等等。

    3)比如商品的收藏、购物车中的物品等等。

    4)这些状态信息,我们都可以放在统一的地方,对它进行保存和管理,而且它们还是响应式的(待会儿我们就可以看到代码了,莫着急)。

07.(掌握)Vuex单界面到多界面状态管理切换(属性共享)

1.传统属性共享是父传子,利用props,如果层级复杂或者深,不方便传递,因此有了Vuex

2.如果不用props,就可以使用Vuex,步骤:

1)npm install vuex --save

2)src中新建store/index.js,并进行安装、创建和导出:

3)main.js导入

4)使用state中的值:<h2>{{$store.state.count}}</h2>

08.(掌握)vuex-devtools和mutations(方法共享)

1.需求,通过vuex实现方法的共享,传统的方法<button @click="add">+<button>

2.vuex官方示意图:

3.vuex通过mutations方法实现共享:

1)在vuex/index.js的mutations中写公用方法:

2)在组件中调用方法( this.$store.commit('increment') ):

09.(掌握)vuex-state单一状态树的理解

1.只建一个$store来管理所有的状态:

const store = new Vuex.Store({}) 

10.(掌握)vuex-getters的使用详解

1.五大属性之一——getters:相当于计算属性computed:

2.如,获取count的平方:

1)getters写计算属性(下图)   2)组件使用<p>{{$store.getters.powerCount}}</p>

3.三个需求,打印年龄大于15岁的学生,并计算人数(getters内方法可以互相使用),并打印年龄大于age的学生

1)state定义数组:

2)大于15岁的学生使用filter函数,计算人数调用getters内部方法(state,getters),需要传递参数的时候要返回function(){}:

App.vue:
<p>{{$store.getters.more15Stu}}</p>
<p>满足条件的学生的个数是:{{$store.getters.more15StuLength}}</p>
<p>打印满足年龄大于?的学生:{{$store.getters.moreAgeStu(3)}}</p>

11.(掌握)vuex-mutations的携带参数

1.Vuex的store的状态更新的唯一方式:提交Mutation

2.传递参数: this.$store.commit('incrementStudent',student)

1)App.vue:

<button @click="addStudent({id:115,name:'tortoise',age:55})">addStudent</button>
...
addStudent(student){
      this.$store.commit('incrementStudent',student)
}

2)mutations方法的第二个参数可以传递数据:

12.(掌握)vuex-mutations的提交风格

App.vue两种风格的区别:

this.$store.commit('incrementCount',count)

1.count是5

2.index.js中:

incrementCount(state,count){ 

state.count += count },

this.$store.commit({

type:"incrementCount",

count  })

1.count是对象{type: "incrementCount", count: 5}

2.index.js中:

incrementCount(state,payload){ 

state.count += payload.count }

13.(掌握)vuex-数据的响应式原理

1.提前定义好的属性(如Info的name和age),在state里都是响应式的,如Info:{name:"kobe" , age:18},修改的话可以直接响应式变化:updateInformation(state){  state.Info.name = "ws"  }

2.但是没有提前定义好的属性,不是响应式的,如对Info对象增加属性:

updateInformation(state){  state.Info['address'] = "洛杉矶"  },Info对象会增加address属性,但是界面并不会响应式刷新

3.解决办法,利用Vue.set()的响应式方法进行添加(或Vue.delete()):

14.(掌握)vuex-mutations的类型常量

(略)

15.(掌握)vuex-actions的使用详解

1.如果mutations的方法内部由异步操作,虽然视图会响应式刷新内容,但是devtools插件不会立即响应数据刷新:

2.解决方案:在actions中写,actions类似mutations,但是可以进行异步操作:

3.Actions除了可以处理异步操作以外,还可以返回Promise对象,进行执行完毕状态的监控

App.vue和index.js代码:

——App调用index,index返回Promise,App用Promise对象.then()获取返回的状态

16.(掌握)vuex-modules使用详解

1.modules中可以实现套娃(index.js部分:):

17.(掌握)vuex-store文件夹的目录组织

index.js中除了state以外,全部把对象抽离出去,再import进来

文件夹结构:

actions.js:


09day


01.(了解)网络请求模块的选择-axios

1.四种网络模块

2.为什么选择axios (ajax i/o system):

在浏览器中发送 XMLHttpRequests 请求

在 node.js 中发送 http请求

支持 Promise API

拦截请求和响应

转换请求和响应数据

3.安装axios:npm install axios --save

02.(掌握)axios框架的基本使用

1.axios请求方式

03.(掌握)axios发送请求和发送并发请求

1.发送get请求:

axios({
    url: 'http://localhost:8081/Scene/Production_1m7m3dtile.json',
}).then(res => {
    console.log(res);
});

2.发送post请求:

axios({
    url: 'http://123.207.32.32:8000/home/data',
    params: {
        type: 'pop',
        page: 1
    }
}).then(res => {
    console.log(res);
});

3.合并发送,全部成功之后再返回:

// axios.all([axios(),axios()])
// .then(res =>{})  或.then(axios.spread((res1,res2) =>{}))
axios.all([axios({
        url: 'http://localhost:8081/Scene/Production_1m7m3dtile.json',
    }), axios({
        url: 'http://123.207.32.32:8000/home/data',
        params: {
            type: 'pop',
            page: 1
        }
    })])
    .then(axios.spread((res1, res2) => {
        console.log(res1)
        console.log(res2)
    }))

04.(掌握)axios配置信息相关

1.全局配置:axios.defaults.baseURL = ‘123.207.32.32:8000’

2.常见的配置选项

请求地址url: '/user',
请求类型method: 'get',
请根路径baseURL: 'http://www.mt.com/api',
请求前的数据处理transformRequest:[function(data){}],
请求后的数据处理transformResponse: [function(data){}],
自定义的请求头headers:{'x-Requested-With':'XMLHttpRequest'},
URL查询对象params:{ id: 12 },
查询对象序列化函数paramsSerializer: function(params){ }
request body data:{ key: 'aa'},
超时设置stimeout:1000,
跨域是否带Token withCredentials: false
自定义请求处理adapter: function(resolve, reject, config){},
身份验证信息auth: { uname: '', pwd: '12'},
响应的数据格式json / blob /document /arraybuffer / text / stream responseType: 'json',

05.(掌握)axios实例和模块封装

1.需求:有时候请求的不止一个服务器,如果用同一个baseUrl并不合适,因此可以采用实例化

2.模块封装(终点是方法三,需求:如果在每个.vue组件中导入(import axios from 'axios')和使用axios({}),导致维护非常困难,一旦换第三方框架,修改太多,正确的做法是统一放在一个地方去封装起来:

1)src中建network文件夹,建文件request.js

2)代码如下,有两种方法:

方法一:函数回调-----------------------------------------------------------------------

设置函数回调,在request.js中传入三个函数:

import axios from 'axios'
//方法1设置回调函数把结果传出去:
export function request(config, success, failure) {
    const instance = axios.create({
        baseURL: 'http://152.1xx.xxx.xxx:7878/api/m5',
        timeout: 5000
    })
    instance(config)
        .then(res => {
            success(res);
        })
        .catch(err => {
            failure(err)
        })
}

main.js中导入,并传入所需的三个函数:

import { request } from './network/request'
request({
    url: '/home/multidata',
}, res => {
    console.log(res);
}, err => {
    console.log(err);
})

方法二:return new Promise对象-----------------------------------------------------------------------

request.js中通过new Promise,再通过main.js.then():

方法三(终极):axios其实是一个Promise----------------------------------------------------

对方法二的request.js进行改进:

main.js不变:

06.(掌握)axios的拦截器的使用

1.拦截器:用于每次请求或者得到响应后,进行对应的处理。一共4个拦截:

请求成功

请求失败

响应成功

响应失败

2.请求拦截使用场景:

   1)比如config中的一些信息不符合服务器的要求

   2)比如每次发送网络请求时,都希望在界面中显示一个请求图标动画

   3)用户必须登录,判断用户是否有token,如果没有token跳转到login页面

   4)请求拦截中错误拦截较少,通常都是配置相关的拦截

3.响应拦截使用场景

   1)响应的成功拦截中,主要是对数据进行过滤。如只需要response.data

   2)响应的失败拦截中,可以根据status判断报错的错误码,跳转到不同的错误提示页面。

4.request.js中详细代码:

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

q124467623

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值