面试题答案
一键面试1. Vuex中的配置
- 定义模块:
- 在
src/store/modules
目录下分别创建user.js
和order.js
文件(假设目录结构如此)。 - 在
user.js
中定义user
模块:
- 在
const state = {
userInfo: {
memberLevel: ''
}
};
const getters = {
getMemberLevel: state => state.userInfo.memberLevel
};
const mutations = {
SET_USER_INFO(state, info) {
state.userInfo = info;
}
};
const actions = {};
export default {
namespaced: true,
state,
getters,
mutations,
actions
};
- 在
order.js
中定义order
模块:
const state = {
discountStrategy: ''
};
const getters = {};
const mutations = {
SET_DISCOUNT_STRATEGY(state, strategy) {
state.discountStrategy = strategy;
}
};
const actions = {
setDiscountStrategy({ commit }, memberLevel) {
let strategy;
if (memberLevel === 'gold') {
strategy = '10% off';
} else if (memberLevel ==='silver') {
strategy = '5% off';
} else {
strategy = 'no discount';
}
commit('SET_DISCOUNT_STRATEGY', strategy);
}
};
export default {
namespaced: true,
state,
getters,
mutations,
actions
};
- 整合模块:在
src/store/index.js
中引入并整合这两个模块:
import Vue from 'vue';
import Vuex from 'vuex';
import user from './modules/user';
import order from './modules/order';
Vue.use(Vuex);
export default new Vuex.Store({
modules: {
user,
order
}
});
2. Vue组件中的调用方式
- 更新用户信息:在相关的Vue组件(如
UserInfo.vue
)中更新用户信息:
<template>
<div>
<button @click="updateUserInfo">Update User Info</button>
</div>
</template>
<script>
export default {
methods: {
updateUserInfo() {
this.$store.commit('user/SET_USER_INFO', { memberLevel: 'gold' });
}
}
};
</script>
- 获取会员等级并设置订单优惠策略:在
Order.vue
组件中获取会员等级并设置订单优惠策略:
<template>
<div>
<p>Discount Strategy: {{ discountStrategy }}</p>
</div>
</template>
<script>
export default {
data() {
return {
discountStrategy: ''
};
},
created() {
const memberLevel = this.$store.getters['user/getMemberLevel'];
this.$store.dispatch('order/setDiscountStrategy', memberLevel).then(() => {
this.discountStrategy = this.$store.state.order.discountStrategy;
});
}
};
</script>
思路总结:
- 首先在Vuex中定义各个模块,
user
模块负责管理用户信息,order
模块负责管理订单相关信息和优惠策略。 - 通过
getters
在user
模块中暴露会员等级信息,order
模块的actions
通过获取user
模块的会员等级来确定优惠策略并提交mutation
更新自身状态。 - 在Vue组件中,通过
$store.commit
和$store.dispatch
来触发Vuex中的mutation
和action
,从而实现模块间的数据共享与交互。