@Artemio95

Почему геттер напрямую false, а в объекте true?

В created хуке дергается метод проверки токена - берется токен из локального хранилища, отправляется на бэк, если тот не просрочен, то формируется новый токен и возвращается положительный ответ на фронт. Этот ответ записывается в геттер isLoggedIn
router.beforeEach((to, from, next) => {
  const requiredAuth = to.matched.some((record) => record.meta.requiresAuth);
  //const isToken = localStorage.getItem("token") != null;
  const isLoggedIn = store.getters.isLoggedIn;
  console.log(store.getters);
  console.log(store.getters.isLoggedIn);
  console.log(store.getters);
  if (requiredAuth && !isLoggedIn) {
    next("/login");
    return;
  }
  next();
});
. Вот эти три консоль лога выведут:
раз
{
    "CARS": [],
    "isLoggedIn": true
}

два
false
три
{
    "CARS": [],
    "isLoggedIn": true
}

И я не понимаю - почему?
Также в девтулзах тоже положительное значение стоит
store:
import Vue from "vue";
import Vuex from "vuex";
import axios from "axios";
import VueAxios from "vue-axios";
import { resolveMappedData } from "../utils";
import { SERVER_HOST } from "../constants";
Vue.use(Vuex);
Vue.use(VueAxios, axios);

export default new Vuex.Store({
  state: { cars: [], user: false },
  mutations: {
    SET_CARS: (state, payload) => {
      state.cars = payload;
    },
    PUSH_CAR_ON_FRONTEND: (state, payload) => {
      state.cars.push(payload);
    },
    REMOVE_CAR_ON_FRONTEND: (state, payload) => {
      state.cars = state.cars.filter(({ id }) => id !== payload);
    },
    CHANGE_CAR_ON_FRONTEND: (state, payload) => {
      // console.log(payload);
      state.cars = state.cars.map((entry) =>
        Number(entry.id) === Number(payload.id) ? payload : entry
      );
    },
    SET_USER(state, payload) {
      state.user = payload;
    },
  },
  actions: {
    async getCars({ commit }) {
      const res = await fetch(`${SERVER_HOST}api/car`);
      const data = await res.json();
      const mappedData = resolveMappedData(data);
      commit("SET_CARS", mappedData);
    },
    getCar({ state }, param) {
      const car = state.cars.find(({ id }) => id === param);
      return car != null ? car : null;
    },
    pushCarOnFrontend({ commit }, car) {
      commit("PUSH_CAR_ON_FRONTEND", car);
    },
    removeCarOnFrontend({ commit }, id) {
      commit("REMOVE_CAR_ON_FRONTEND", id);
    },
    changeCarOnFrontend({ commit }, id) {
      commit("CHANGE_CAR_ON_FRONTEND", id);
    },
    login({ commit }, { login, password }) {
      const isLoggedIn = axios
        .post(`${SERVER_HOST}/login`, { login, password })
        .then((res) => {
          if (res.status === 200) {
            commit("SET_USER", true);
            localStorage.setItem("token", res.data.token);
            return true;
          }
          return false;
        })
        .catch((err) => {
          console.error(err);
          return false;
        });
      return isLoggedIn;
    },
    auth({ commit }) {
      const isLoggedIn = axios
        .get(`${SERVER_HOST}/auth`, {
          headers: { Authorization: `Bearer ${localStorage.getItem("token")}` },
        })
        .then((res) => {
          if (res.status === 200) {
            commit("SET_USER", true);
            localStorage.setItem("token", res.data.token);
            return true;
          }
          return false;
        })
        .catch((err) => {
          console.error(err);
          localStorage.removeItem("token");
          return false;
        });
      return isLoggedIn;
    },
  },
  getters: {
    CARS: (state) => {
      return state.cars;
    },
    isLoggedIn(state) {
      return state.user;
    },
  },
  modules: {},
});
  • Вопрос задан
  • 97 просмотров
Решения вопроса 1
Aetae
@Aetae Куратор тега Vue.js
Тлен
Потому что консоль не клонирует объекты.
false - значение на момент вывода console.log.
true - значение на момент клика тобой на объект в консоли.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы