前言
这几年一直在it行业里摸爬滚打,一路走来,不少总结了一些python行业里的高频面试,看到大部分初入行的新鲜血液,还在为各样的面试题答案或收录有各种困难问题
于是乎,我自己开发了一款面试宝典,希望能帮到大家,也希望有更多的Python新人真正加入从事到这个行业里,让python火不只是停留在广告上。
微信小程序搜索:Python面试宝典
或可关注原创个人博客:https://lienze.tech
也可关注微信公众号,不定时发送各类有趣猎奇的技术文章:Python编程学习
VueX
Vuex
是一个专为Vue.js
应用程序开发的状态管理模式,可以方便我们在vue
中进行数据通信,共享
有了vuex
,在vue
中,各个组件都可以共同访问一个vuex
存储仓库
- 安装vuex
cnpm install --save vuex
# 安装vuex至当前项目目录下,并写入依赖文件
vue-cli
工程配置vuex
在项目文件夹下与router
目录平级,创建store
文件夹,并在目录下创建index.js
// /store/index.js
import Vue from 'vue'
import Vuex from 'vuex'
Vue.use(Vuex)
const store = new Vuex.Store({
state: {data : "需要共享的数据"}
})
export default store
在项目主要的main.js
文件中引入该文件,使vue注册并使用vuex实例对象,注意当前store
文件与main.js
同级
import Vue from 'vue'
import App from './App'
import router from './router'
import store from './store' // 导入vuex实例
Vue.config.productionTip = false
/* eslint-disable no-new */
new Vue({
el: '#app',
store, // 此处使用vue-store状态管理
router,
components: { App },
template: '<App/>'
})
state
用来管理公共数据,所有的vuex
的公共数据都应放在Store
的state
中
const store = new Vuex.Store({
state: {count : 0}
})
访问数据
- 组件中访问
this.$store.state.count
- 模版中访问
{{ $store.state.count }}
mapState
访问
import {mapState} from vuex
mapState
可以使用mapState
方法将全局数据映射为当前组件的计算属性
computed: {
...mapState(['count']) // 使用展开运算符,映射计算属性
}
Mutations
Vuex
中,不允许在组件中直接操作数据,比如下面错误的代码
this.store.state.count++
正确的方式应该是通过mutations
属性中的函数进行修改,可以监控变量的改变来源,对代码维护更加友好
修改数据
比如对state
中某个变量进行操作
export default new Vuex.Store({
state: {count: 0},
mutations: {
add(state) { // 参数代表当前全局数据对象state
state.count++ // 自增
}
}
})
使用mutations
方法,在组件中,通过this.$store.commit
使add
方法触发
add() {
this.$store.commit("add")
}
如果希望在调用mutations
方法时传入参数,可以在定义mutations
方法时额外维护参数
mutations: {
add(state, num) { // 参数代表当前全局数据对象state
state.count += num // 自增
}
}
那么在组件中,在this.$store.commit
方法触发时,传入参数即可
addN(){
this.$store.commit("addN", 3)
}
mapMutations
还可以通过mapMutations
将所需的mutations
方法映射为当前组件的methods
方法
比如你有一个方法来实现减法
mutations:{
sub(state) {
state.count--
}
}
那么在组件中,通过mapMutations
即可将其注册到当前组件下
methods: {
...mapMutations(["sub"]),
},
之后在按钮绑定sub
方法,即可实现减法
如果需要映射的方法具有参数,那么直接按照正常方法进行传递即可
mutations:{
subN(state, num) {
state.count -= num
}
}
...mapMutations(["subN"])
this.subN(2)
Actions
异步任务
actions
用以在vuex
的业务中进行异步任务处理
如果希望异步处理数据,比如通过定时器等,那么需要通过actions
,而不能直接使用mutations
下的方法
要将mutations
的方法在actions
下执行
- 延迟修改数据的
actions
方法
actions: {
addAsync(context) {
setTimeout(() => {
context.commit("add") // 依旧使用mutations下的add方法
}, 1000) // 延迟 1秒调用add
}
}
- 触发
actions
方法,要通过store
的dispatch
方法
add_async(){
this.$store.dispatch("addAsync")
},
mapActions
通过mapActions
也同样可以触发actions
中的方法
import { mapActions } from 'vuex';
methods:{
...mapActions{
['add_async']
}
}
Getter
计算属性
可以加工store
中的数据,但不影响原有数据,只会生成一个新的
并且,类似计算属性,当原数据发生改变时,getter
对应的新值也会发生改变
new Vuex.Store({
state: {count: 0},
getters:{
showCount(state){
return state.count+10
}
}
})
之后在组件中使用getters属性即可
this.$store.getters.showCount
mapGetters
也可以使用mapGetters
方法进行getters
中属性的映射调用
注意是在组件的计算属性中定义
import { mapGetters } from 'vuex'
computed: {
...mapGetters(
['showCount']
)
}