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 |