面试题答案
一键面试- 定义状态(state):
在Vuex的
state
对象中定义登录请求的相关状态。
// store.js
const state = {
loginLoading: false,
loginSuccess: false,
loginError: null
}
- 定义mutations方法:
SET_LOGIN_LOADING
:设置登录加载状态。SET_LOGIN_SUCCESS
:设置登录成功状态。SET_LOGIN_ERROR
:设置登录失败状态。
const mutations = {
SET_LOGIN_LOADING(state, payload) {
state.loginLoading = payload;
},
SET_LOGIN_SUCCESS(state, payload) {
state.loginSuccess = payload;
state.loginError = null;
},
SET_LOGIN_ERROR(state, payload) {
state.loginError = payload;
state.loginSuccess = false;
}
}
- 完整示例:
import { createStore } from 'vuex';
const store = createStore({
state: {
loginLoading: false,
loginSuccess: false,
loginError: null
},
mutations: {
SET_LOGIN_LOADING(state, payload) {
state.loginLoading = payload;
},
SET_LOGIN_SUCCESS(state, payload) {
state.loginSuccess = payload;
state.loginError = null;
},
SET_LOGIN_ERROR(state, payload) {
state.loginError = payload;
state.loginSuccess = false;
}
}
});
export default store;
在组件中使用:
<template>
<div>
<button @click="login">登录</button>
<div v-if="loginLoading">加载中...</div>
<div v-if="loginSuccess">登录成功</div>
<div v-if="loginError">{{ loginError }}</div>
</div>
</template>
<script setup>
import { useStore } from 'vuex';
const store = useStore();
const login = () => {
store.commit('SET_LOGIN_LOADING', true);
// 模拟登录请求
setTimeout(() => {
const success = Math.random() > 0.5;
if (success) {
store.commit('SET_LOGIN_SUCCESS', true);
} else {
store.commit('SET_LOGIN_ERROR', '登录失败');
}
store.commit('SET_LOGIN_LOADING', false);
}, 1000);
}
</script>