Vuex를 사용할 때 잘못된 점은 무엇입니까?가게?
"Vuex Store" 기능을 활용하여 프로젝트 전체에서 "isAuthenticated" 변수를 저장 및 사용하고 이에 따라 루트에 대한 액세스를 제공하고 싶습니다.내 잘못은 무엇일까?vue store를 프로젝트에 포함시키기 위해 많은 다양한 방법을 검토했지만 아무 성과도 없었습니다.
"store"의 "index.js":
import Vue from 'vue';
import Vuex from 'vuex';
Vue.use(Vuex);
const store = new Vuex.Store({
state: {
isAuth: false,
},
mutations: {
setAuthStatus(state, status) {
state.isAuth = status;
},
},
});
export default store;
"root(src)"의 "main.js":
import Vue from 'vue';
import App from './App.vue';
import router from './router';
import store from './store';
import vuetify from './plugins/vuetify';
Vue.config.productionTip = false;
new Vue({
render: (h) => h(App),
store,
router,
vuetify,
}).$mount('#app');
브라우저 오류:
예를 들어, 표시된 코드에 큰 구멍이 있습니다(또는 포함하지 않았습니다).일단은...isAuth
는 부울(true/false)일 뿐입니다.이 기능이 작동하려면 어딘가에서 이 기능을 사용해야 합니다(즉,router.js
특정 루트로의 네비게이션을 방지하기 위한 파일).
다음은 사용자 인증 및 역할의 간단한 구현입니다.당신의 예보다 조금 더 복잡한 건 인정하지만, 이해하실 수 있을 겁니다.
라우터
import { createRouter, createWebHistory, RouteRecordRaw } from "vue-router";
import Home from "../views/Home.vue";
import store from "../store";
const routes: Array<RouteRecordRaw> = [
{
path: "/",
name: "Home",
component: Home,
},
{
path: "/admin",
name: "Admin",
component: () => import("../views/Admin.vue"),
children: [],
meta: { role: "admin", requiresAuth: true },
},
{
path: "/manager",
name: "Manager",
component: () => import("../views/Manager.vue"),
children: [
{
path: "/employees",
name: "Employees",
component: () => import("../views/children/manager/Employees.vue"),
},
],
meta: { role: "manager", requiresAuth: true },
},
{
path: "/employee",
name: "Employee",
component: () => import("../views/Employee.vue"),
children: [],
meta: { role: "employee", requiresAuth: true },
},
{
path: "/login",
name: "Login",
component: () => import("../views/Login.vue"),
meta: { requiresAuth: false },
},
{
path: "/about",
name: "About",
component: () => import("../views/About.vue"),
meta: { requiresAuth: false },
},
];
const router = createRouter({
history: createWebHistory(process.env.BASE_URL),
routes,
});
router.beforeEach((to) => {
if (to.meta.requiresAuth && !store.getters.isLoggedIn) {
return { path: "login" };
} else if (to.meta.role && to.meta.role !== store.getters.userRole) {
return { path: store.getters.userRole };
}
});
export default router;
여기서 중요한 두 가지 아이템이 있습니다.그meta
일부 루트의 속성 및beforeEach
루트가 변경될 때마다 실행되는 방식입니다.
메타 속성은 라우터에 "Hi, 이것들은 나의 조건입니다.입력하기 전에 그것들을 충족시켜야 합니다." (이러한 정보는 에서 적용되고 있습니다.)beforeEach
메서드)를 참조해 주세요.
가게
import { createStore } from "vuex";
import { User } from "../types";
export default createStore({
state: {
user: <User>{},
},
getters: {
isLoggedIn: (state): boolean => !!Object.keys(state.user).length,
userRole: (state): string => state.user.role,
},
mutations: {
SET_USER(state, user): void {
state.user = { ...user };
},
},
actions: {},
modules: {},
});
우리는 이것을 에 내보냅니다.router.js
를 사용하고 있는 파일getters
를 위해beforeEach
방법.
앱.
import { createApp } from "vue";
import App from "./App.vue";
import "./registerServiceWorker";
import router from "./router";
import store from "./store";
createApp(App).use(store).use(router).mount("#app");
메인 파일에는 특별한 내용이 포함되어 있지 않아야 합니다.
버전
Vuex 4.0은 Vue3와 호환되므로 Vue3를 사용하고 있는지 확인하십시오(구문에 따라서는 그렇지 않습니다).
언급URL : https://stackoverflow.com/questions/71194172/what-am-i-doing-wrong-when-using-vuex-store
'programing' 카테고리의 다른 글
왜 C 컴파일러는 같은 변수에 대한 두 개의 포인터가 불법/UB일 것이라고 가정하고 const pointer의 값을 변경하는 것을 최적화할 수 없는가? (0) | 2022.08.10 |
---|---|
비동기 함수의 디바운스 사용방법 (0) | 2022.08.10 |
Vue의 v-for 루프 내에서 항목을 console.log하는 방법 (0) | 2022.08.10 |
초기 페이지 로드 시 사용자 가져오기 - Nuxt 미들웨어 (0) | 2022.08.10 |
날짜를 "11일", "21일" 또는 "23일"(정규 표시기)으로 어떻게 포맷합니까? (0) | 2022.08.10 |