我希望添加一个新的任务对象,并通过单击Add按钮在父组件数组中可视化它。但我有一个错误newTask是没有定义。即使我在子组件中形成newTasks并将其传递给vuex中的父数组。
https://stackblitz.com/edit/nuxt-bootstrap-vue-dynamic-img-bkwixg?file=store%2Findex.js,components%2FTask.vue,pages%2Findex.vue
// Child component
methods: {
addTask() {
let newTask = {
id: Math.floor(Math.random() * 25),
title: this.title,
completed: false,
};
if (newTask) {
console.log(newTask);
this.$store.dispatch('addTask', newTask);
this.title = '';
}
},
}
// Store
export const state = () => ({
tasks: [],
});
const actions: {
async addTask(context, data) {
data = {
...data,
newTask, // getting an error here - newTask is not defined
};
const res = await fetch('https://jsonplaceholder.typicode.com/todos', {
method: 'POST',
headers: {
'Content-Type': 'appication/json;charset=utf-8',
},
body: JSON.stringify(data),
});
if (res.ok) {
let result = await res.json();
context.dispatch('getTasks');
}
return res.ok;
},
}
const mutations: {
setTasks(state, data) {
state.tasks = data;
},
}
储存
3条答案
按热度按时间6ss1mwsb1#
看起来您试图将
newTask
作为addTask
动作中发送的data
对象的属性传递,但是newTask
没有在actions
对象的作用域中定义。要解决此问题,您只需从
data
对象中删除newTask
属性:您已经将
newTask
对象作为第二个参数传递给子组件(this.$store.dispatch('addTask', newTask)
)中的addTask
操作,因此它将在操作中作为data
参数可用。此外,在
setTasks
变化中,您将state.tasks
设置为整个响应数据对象(state.tasks = data
),但您可能只想将其设置为新添加的任务对象。要解决此问题,您可以将突变更改为:这将把新任务添加到
state.tasks
数组中,而不是用整个响应数据对象覆盖它。ao218c7q2#
我检查了你的项目,发现了错误。
当你调用API时,Backend没有添加newTask,这是错误的。因此,当您获得响应时,没有您添加的newTask数据。
iklwldmw3#
你有后端代码吗?我认为你应该修改
https://jsonplaceholder.typicode.com/todos
请求的控制器。在此控制器中,不处理addTask
请求。addTask
请求未插入到数据库。你必须修改后端的控制器。你可以给予我后端,然后我会解决这个错误。