2017-02-23 49 views
1

Я пытаюсь создать объект в одной части хранилища vuex, а затем передать ему id другому объекту, и я не уверен, как правильно это сделать, поскольку мутации не могут return return anything (в данном случае id).Возвращаемое значение от мутации vuex? (id для вновь созданного объекта)

Два объекта магазина выглядеть следующим образом:

// store/report.js 
const state = { 
    name: 'Untitled Report', 
    subReportIds: [] 
}; 

// store/subReport.js 
const state = { ... } 

И я хотел бы это действие, чтобы создать пустой отчет, затем пустой подотчет, а затем назначить подотчет идентификатор для вновь созданного отчета. (Подотчетов являются независимыми юридическими лицами и могут быть использованы несколько отчетов, следовательно, разные области в магазине)

const actions = { 
    createNewReport({ state, commit }) { 
     commit(mutationTypes.CREATE_NEW_REPORT) 
     // below doesn't work - i can't get return from mutation 
     let newSubreportId = commit(mutationTypes.ADD_NEW_SUBREPORT) 
     // if this worked, i'd then do something like 
     commit(mutationTypes.ADD_SUBREPORT_TO_REPORT, newSubreportId) 
    } 
}; 

Как я могу добиться выше?

ответ

4

Таким образом, наилучшим способом для меня было бы отправлять действия вместо совершения мутаций. Если вы посмотрите на методах в источнике Vuex, commit только исполняет (так пустота) и dispatch возвращает значение, когда вы вернетесь из действия (который является функцией)

Для моих действий, я всегда возвращать обещание так, что Я могу составить их, как вы упомянули выше. Вот пример.

fetchSomething ({ commit }) { 
    return mockApiGetIds() 
    .then(response => { 
     commit({ 
     type: SOME_MUTATION, 
     ids: response 
     }); 

     return response; 
    }); 
    },