VueX неправильно хранит данные в магазине - PullRequest
0 голосов
/ 09 января 2019

У меня есть страница службы входа в систему и страница профиля учетной записи, а также страница формы обновления учетной записи, и при входе в систему я получаю токен и пользователя обратно из API-интерфейса и устанавливаю данные в хранилище в мутации. Если я хочу обновить профиль, я перехожу на страницу «/ profile / edit» и отправляю форму на сервер, и если запись обновляется на сервере, я возвращаю обновленную запись пользователя в ответ и устанавливаю этот новый объект пользователя. в магазине и перенаправить на страницу профиля пользователя в «/ профиль». Пока все хорошо, я вижу, что атрибуты учетной записи изменились на странице профиля, однако, когда я обновляю страницу, я получаю старый пользовательский объект, полученный после входа в систему, поэтому по какой-то причине новый пользователь не был установить в магазине должным образом, и я не понимаю, что происходит. Буду признателен за вашу помощь. Вот мой код:

Магазин

export default new Vuex.Store({
    state: {
        auth: {
          apiToken: null,
          user: {},
        }
    },
    getters,
    mutations,
  actions
})

Действие входа

login({ commit }, payload){
    axios.post('/api/auth/login', payload)
        .then(response => {
            commit('authenticateUser', {
                token: response.data.api_token,
              user: response.data.user
          })
              localStorage.setItem('token', response.data.api_token)
              localStorage.setItem('user', JSON.stringify(response.data.user))

              router.push('/')
        })
        .catch(error => {
            commit('showErrorAlert')
        })
    }

AuthenticateUser мутация

authenticateUser(state, payload) {
    state.auth.apiToken = payload.token
    state.auth.user = payload.user
    state.auth.signedIn = true
  }

действие saveUserProfile

saveUserProfile({ commit }, payload){
    axios.patch('/api/users/' + payload.get('id'), payload)
       .then(response => {
           commit('saveUserProfile', response.data)
           router.push('/profile')
      })
      .catch(error => {
          console.log(response)
      })
  }

saveUserProfile мутация

saveUserProfile(state, payload){
    state.auth.user = payload
    console.log(state.auth.user)
    # Here I get the updated user from the server with new attribtues
}

В компоненте userProfile у меня есть свойство computed, которое выбирает пользователя из хранилища.

<script>
    export default {
      computed: {
          current_user(){
             return this.$store.getters.currentUser;
             # here, after updating the account I get the new user record but when I refresh the page, I get the old record.
          }
       }
     }
</script>

Когда я попадаю на страницу профиля после обновления учетной записи, я получаю новые атрибуты, но после обновления страницы я получаю старые данные. Это странно, потому что я думаю, что VueX хранит данные в памяти. Я могу подтвердить это, войдя в систему и проверив состояние в консоли браузера VueX. Я вижу, что там есть запись пользователя. Если я, например, захожу в '/ dashboard', я вижу, что запись пользователя все еще там. Это довольно странно. Я что-то не так делаю?

UPDATE

currentUser getter

currentUser: state => {
    return state.auth.user
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...