Vue: как сделать так, чтобы компонент, предоставляющий информацию о зарегистрированном пользователе, реагировал на данные сеанса? - PullRequest
1 голос
/ 25 июня 2019

Я понимаю, как использовать плагин Vue, такой как vue-session, для создания и проведения сеанса.Но я не уверен, как обращаться с пользовательскими данными из сеанса, особенно когда речь идет о реактивности.Например: у меня есть пользовательский компонент в заголовке навигации, который отображает зарегистрированного в данный момент пользователя.Как я могу убедиться, что имя пользователя, отображаемое через этот пользовательский компонент, является реактивным?Другими словами: если во время использования приложения происходит вход в систему (для включения ограниченных функций), то как компонент User может знать?

Является ли $watch верным путем?Но это означает опрос, не так ли?

Как я могу гарантировать, что пользовательские данные, хранящиеся в плагине сеанса, являются реактивными?

Представьте себе такой компонент, который визуализирует вошедшего в систему пользователя:

<template>
  <div>
    <div v-if="user.username">
        Logged in as {{user.username}}
    </div>
    <div v-else>
        Not logged in.
    </div>
  </div>
</template>

<script>

export default {
  name: "LoggedInUser",
  data() {
    return {
      user: {
        username: null,
        email: null
      }
    };
  },
  computed: {
    user() {
      return { this.$session.user };
    }
  }
};
</script>

Я не хочу определять пользователя сеанса в методе create, поскольку он должен быть реактивным (реагирующим на выход из системы / вход в систему).

Каков наилучший вариант для этого?

1 Ответ

0 голосов
/ 25 июня 2019

Лучший способ - использовать вычисляемое свойство (как вы это сделали), которое использует геттер из хранилища Vuex (или отображенный геттер в Vuex говорит). Все состояние, хранящееся в магазине Vuex, является реактивным, поэтому вы получите то, что ищете.

Вместо сохранения текущего пользователя в $session из vue-session, он будет сохранен в хранилище Vuex.

Vuex: https://vuex.vuejs.org/

О вью-сессии

Я быстро взглянул на этот плагин и его источник (всего ~ 100 строк), и там определенно нет никакой реактивности. По сути это удобный интерфейс над window.localStorage. $watch работает только с реактивными данными (например, объектом data компонента), который не предоставляется этим плагином.

Реактивность может быть модифицирована с помощью Vue.observable (объект) Я думаю, что.

Хорошее чтение о реактивности: https://stackoverflow.com/a/54492326/1030527

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...