мутации vuex, заменяющие все состояние - PullRequest
1 голос
/ 11 октября 2019

Я работаю с Vuex, и я новичок в этом. Я хочу зафиксировать данные в хранилище и заменить их состояние на содержимое полезной нагрузки.

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

В настоящее время я делаю что-то вроде своей мутации,

setUser(state, payload) {
    state.user = {...payload.user}
}

Это делает мойсостояние выглядит так после выполнения коммита

user: {
   user: {
     nickname: 'Bob',
     host: true,
     emoji: 'Smile',
     passcode: 12345678,
     room_id: 123
   }
}

В идеале я не хочу, чтобы пользовательский объект был в пользовательском объекте, я либо хочу, чтобы каждый атрибут пользователя был частью состояния, например,

state : {
    nickname: 'Bob',
    host: true,
    emoji: 'Smile',
    passcode: 12345678,
    room_id: 123
}

или это может выглядеть так:

state : {
    user: {
        nickname: 'Bob',
        host: true,
        emoji: 'Smile',
        passcode: 12345678,
        room_id: 123
    }
}

Я не понимаю, почему я получаю state.user.user?

вот пользовательский модуль моего состояния,

export default {
state: {
    user: {}
},
mutations: {
    setUser(state, payload) {
        state.user = {...payload.user}
    }
},
actions: {

},
getters: {

}

};

Я также попробовал вышеупомянутое, просто state:{}

Ответы [ 2 ]

0 голосов
/ 16 октября 2019

Я согласен с @isebarn, если вы предоставите то, что поставляется с вашей полезной нагрузкой, это должно быть решено довольно легко.

{"quiz_history": [], "user": {"id":1, "псевдоним": "Боб", "логин_кода": "76752576", "хост": 1, "номер_дома": 1, "эмодзи": "смайлик", "созданный_ат": "2019-10-11 11:09:12 "," updated_at ":" 2019-10-11 11:09:12 "}}

Если это то, что вы получаете и передаете в метод, он должен работать. Но я предполагаю, что вы можете передать что-то еще, и синтаксис трехточечного разброса не работает.

0 голосов
/ 11 октября 2019

Это из-за того, что вы косвенно создаете другой пользовательский объект в следующем слое мутации

   setUser(state, payload) {
        state.user = {...payload.user }
    }

На слое мутации состояние уже представляет все пользовательское состояние. Таким образом, вы можете напрямую назначить объект пользователя здесь.

   setUser(state, payload) {
        state = {...payload.user }
    }

Обычно объект состояния нужно инициализировать следующим образом:

state : {
    nickname: '',
    host: false,
    emoji: '',
    passcode: null,
    room_id: null
}
...