Vuex
Vuex的基本改变
- state: 状态;
- mutation: 同步的修改状态;
- action: 1、异步的修改状态; dispach一个action出来做修改;action里面提交的是mutation; 2、action函数接收一个context,store实例相同的方法和属性的对象{commit, getter, state}
- getter: 获取state;
vuex的使用场景
vuex是为了解决组件间通信而生的,并不是为了简要的缓存而成;所以以下的情况并不适应vuex来实现,如之前的支付页面就适用于vuex来实现——复杂的状态处理组件;
- 客户类型,存储,在页面加载的时候去获取一波;
- 标签类型:获取标签,标签更新,同步;
vue的两个小知识点
prop的值和子组件渲染问题
父组件异步传来的,prop,子组件中渲染是否存在异步问题?
数据更新追踪是子组件中模板中用到prop值,prop值是会被追踪到的更新的;但是子组件拷贝了一下父组件的prop,切断了追踪,要知道更新的话只能watch;
computed和watch;
computed就是一个纯函数,返回的是一个新的属性出来;watch就是监听一个属性的变化,做一些操作;
Promise
Promise基本概念
promise是对异步编程的一种实现,解决传统回调地狱,事件机制的等异步的问题;
Promise的特性
- promise有三种状态,分别是resolve,reject,pedding;状态一但改变就不可逆;
const a = new Promise((resolve,reject)=> {
// <!-- 异步成功 -->
if() {
const res = getList()
resolve(res);
// <!-- 异步失败 -->
} else {
}
});
a.then((res) => {
<!-- resolve以后的执行回调 -->
console.log(res);
}).catch(()=> {
})
- promise实例创建了就会立马执行,先执行完当前的同步操作,然后才会执行then里面的异步回调;
const promise = new Promise((resolve,reject) => {
console.log('11');
resolve();
console.log('22');
})
promise.then(() => {
console.log('333');
});
// 11
// 22
// 333
- promise.all() 将多个promise实例,变为一个新的promise实例;
const promise = Promise.all([p1,p2,p3])
p1,p2,p3状态都改变了(可能这个状态是reject),就会调用promise.then;
-
promise.race()
返回状态最先改变的那个状态,这个可能是reject
-
promise的错误异常机制:
错误都是从内到外,只要捕获到就处理;如果内部状态被捕获到就变为reject,状态改变;
await, async
await, async是对Generator的一种封装。
- async getAllList函数返回的是一个Promise; await函数获取到的是该getList函数promise执行完以后的值;
async getAllList() {
await getList();
}
- await 后面是一个promise,就返回这个promise的结果值;如果是原始值,就返回这个原始值;
- 连续的async封装调用的,用到async的函数就要把该函数变为async;
- async封装的返回值或者错误会导致这个promise的状态改变;