Почему не передаются параметры при PUT запросе в vue axios
Я отправляю PUT запрос при помощи axios вот таким образом
update(resource, slug, params) {
return Vue.axios.put(`${resource}/${slug}`, params);
},
export const CampaignUpdateService = {
get(slug) {
return ApiService.get('campaigns/update', slug)
},
update(slug, params) {
return ApiService.update('campaigns/update', slug, {params})
}
}
в модуле
[UPDATE_CAMPAIGN]({commit}, slug, params) {
console.log(slug)
return CampaignUpdateService.update(slug, params)
.then((response) => {
commit(SET_CAMPAIGN, response.data)
})
}
и вызываю в компонентe
fetchUpdateCampaign() {
this.$store.dispatch(UPDATE_CAMPAIGN, this.slug, this.listConfig.filters)
},
запрос уходит но его тело это пустой массив, а iDE подсказывает Argument type {name: string, tel: number, email: string} is not assignable to parameter type DispatchOptions | undefined Что я делаю не так, в чем может быть ошибка console.log(this.listConfig.filters) показывает что данные есть???
Ответы (1 шт):
Действия Vuex выделяют только один параметр для пользовательских данных. То есть, всего у действий есть два параметра (context, payload) - соответственно, и при вызове действия через dispatch ожидается только один аргумент с данными, а всего параметров у метода dispatch три (actionType, payload, options).
Передавать в dispatch больше одного аргумента с данными - бесполезно: третий аргумент будет воспринят как необязательный объект опций, а оставшиеся (четвертый, пятый, и так далее) будут просто проигнорированы.
Когда пэйлоадом нужно передать в действие несколько значений, их следует помещать в массив или объект.
Действие Vuex (с деструктуризацией второго аргумента, где ожидается объект):
[UPDATE_CAMPAIGN]({ commit }, { slug, params } = {}) {
return CampaignUpdateService.update(slug, params).then((response) => {
commit(SET_CAMPAIGN, response.data);
});
},
Вызов этого действия из метода компонента, соответственно:
fetchUpdateCampaign() {
this.$store.dispatch(UPDATE_CAMPAIGN, {
slug: this.slug,
params: this.listConfig.filters,
});
},