3 回答

TA貢獻1810條經驗 獲得超4個贊
你的邏輯完全沒問題。但是在你的一句話中你提到“我會向后端發送刪除記錄的請求,然后只返回一條消息的響應。 ”這意味著除了 json 消息之外你沒有返回任何數據(我認為)。這意味著cls是空的,你正試圖singleClassroom用空值過濾狀態。那肯定不行。
所以我會建議設置你試圖在你的ACTION. 請看下面的代碼:
改變這個
async unassignCoursandTeacher({ commit }, classroom) {
let response = await Axios.post(
"/dashboard/school/unassignCoursandTeacher/" + classroom.id,classroom
);
let cls = response.data; // You are assigning cls to an empty attribute - this where the issue is.
if (
response.status == 200 ||
response.status == 201 ||
response.status == 204
) {
commit("UNASSIGN_COURS_AND_TEACHER_FROM_CLASSROOM", cls);
return cls;
}
}
為此
async unassignCoursandTeacher({ commit }, classroom) {
let response = await Axios.post(
"/dashboard/school/unassignCoursandTeacher/" + classroom.id,classroom
);
if (
response.status == 200 ||
response.status == 201 ||
response.status == 204
) {
let cls = classroom.yourCoursID; // Here we are assigning cls value to the cours ID.
commit("UNASSIGN_COURS_AND_TEACHER_FROM_CLASSROOM", cls);
return cls;
}
}

TA貢獻1942條經驗 獲得超3個贊
我不確定我是否同意@Rodrigo。Vuex 狀態作為data組件中的屬性是反應性的,我想您在 vuex 狀態中定義了 singleClassroom 數據(包括 courses 屬性),使其具有反應性。我認為這種情況不適用于此處列出的變更檢測警告。
我不知道是什么cls,但我懷疑它代表一個 id。這是因為您從response.data. 我強烈懷疑cls是您要刪除的課程,并且您正在針對它過濾課程 ID,但它們不是同一類型。我還可以建議您使用嚴格相等 (===),因為它可以減少出現錯誤的機會。
我認為問題可能出在這里
UNASSIGN_COURS_AND_TEACHER_TO_CLASSROOM(state, cls) {
let cours = state.singleClassroom.courses.filter(c => c.id != cls); // if cls is the course, I think you are filtering the wrong thing
state.singleClassroom.courses = cours;
}
嘗試更改為
UNASSIGN_COURS_AND_TEACHER_TO_CLASSROOM(state, cls) {
let cours = state.singleClassroom.courses.filter(c => c.id !== cls.id);
state.singleClassroom.courses = cours;
}

TA貢獻1993條經驗 獲得超6個贊
嘗試使用Vue.set( target, propertyName/index, value )更新您的對象。
向響應式對象添加一個屬性,確保新屬性也是響應式的,從而觸發視圖更新。這必須用于向反應對象添加新屬性,因為 Vue 無法檢測正常的屬性添加(例如 this.myObject.newProperty = 'hi')。
UNASSIGN_COURS_AND_TEACHER_TO_CLASSROOM(state, cls) {
let cours = state.singleClassroom.courses.filter(c => c.id != cls);
Vue.set(state.singleClassroom, 'courses', cours);
}
https://v2.vuejs.org/v2/api/#Vue-set
添加回答
舉報