변환에서 푸시할 때 Vuex 저장소에서 구성 요소 컬렉션을 업데이트하지 않음
밀려고 해task
로.state.tasks
변수 배열은 변환을 통해 저장 모듈에 있습니다.모든 작업을 가져와 할당하는 경우state.tasks
모든 것이 완벽하게 작동하고 화면에 표시되지만task
에 대해서state.tasks
스토어에서 뷰에 추가하지 않습니다.(console.log 태스크가 state.tasks로 변환되어 있는 것을 console.log 태스크에서 확인했습니다.에러는 없습니다).아래에 정보를 남겼습니다.내가 뭘 잘못하고 있지?
상태:
const state = {
tasks: [],
};
액션:그tasks
Import하는 API 서비스입니다.import tasks from '../../api/tasks';
const actions = {
getTasks({commit}) {
return new Promise((resolve, reject) => {
tasks.getTasks().then(response => {
commit('setTasks', response.data.data);
resolve(response);
}).catch(error => {
reject(error);
})
});
},
createTask({commit}, text) {
return new Promise((resolve, reject) => {
tasks.createTask(text).then(response => {
commit('createTask', response.data.data);
resolve(response);
}).catch(error => {
reject(error);
})
});
}
};
변환:
const mutations = {
setTasks(state, tasks) {
state.tasks = tasks;
},
createTask(state, task) {
state.tasks.push(task);
console.log(state.tasks);
}
};
취득자:
const getters = {
undoneTasks(state) {
return state.tasks.filter(task => task.done == false);
},
doneTasks(state) {
return state.tasks.filter(task => task.done == true);
}
};
구성 요소:
mounted() {
store.dispatch('getTasks').catch(error => {
if (error.response) {
this.checkResponse(error.response.status);
}
});
},
methods: {
createTask() {
store.dispatch('createTask', this.taskText)
.then(() => {
this.taskText = '';
}).catch(error => {
if (error.response) {
this.checkResponse(error.response.status);
}
});
}
},
computed: {
...mapGetters({
tasks: 'undoneTasks'
}),
},
갱신필
모듈 동작 중tasks
Import하는 API 서비스입니다.import tasks from '../../api/tasks';
나도 노력했어state.tasks.pop()
잘못된 수신 데이터 때문인 줄 알았는데 다시 확인해보니 정말 state.tasks 하지만 컴포넌트가 반응하지 않습니다.
좋아, 얘들아, 내가 알아냈어모든 지원과 답변에 감사드립니다.그래서 저는 수동으로 Push in mutation 객체를 설정해 보았습니다.
createTask(state, task) {
const taskObj = {id: task.id, text: task.text, done: false};
state.tasks.push(taskObj);
}
그리고 성공했어요, 문제는done
이 필드는 서버에서 null로 수신되었습니다.vuex에 대한 정보를 더 읽어봐야 할 것 같은데, 너무 이상해요...
작업을 빈 어레이로 설정하고, 우선 작업을 빈 어레이로 설정하고,createTask
변환: 작업을 배열에 추가합니다.코드를 다시 작성했습니다만, spread를 사용하고 있지 않습니다.mapGetters
.
const store = new Vuex.Store({
state: {
tasks: [],
},
actions: {
createTask({commit}, task) {
return new Promise((res, rej) => {
setTimeout(() => {
commit('createTask', task);
res(true);
}, 1000);
});
},
},
mutations: {
createTask(state, task) {
state.tasks.push(task);
},
},
getters: {
undoneTasks: state => state.tasks.filter(t => t.done === false),
},
});
new Vue({
el: "#app",
store,
data: {
},
methods: {
toggle: function(todo){
todo.done = !todo.done
}
},
computed: {
tasks() {
return this.$store.getters.undoneTasks;
}
},
created() {
this.$store.dispatch('createTask', { text: "Learn JavaScript", done: false });
this.$store.dispatch('createTask', { text: "Learn Vue", done: false });
setTimeout(() =>
[{ text: "Play around in JSFiddle", done: false },
{ text: "Build something awesome", done: false }].map(t => this.$store.dispatch('createTask', t)), 1000);
}
})
body {
background: #20262E;
padding: 20px;
font-family: Helvetica;
}
#app {
background: #fff;
border-radius: 4px;
padding: 20px;
transition: all 0.2s;
}
li {
margin: 8px 0;
}
h2 {
font-weight: bold;
margin-bottom: 15px;
}
del {
color: rgba(0, 0, 0, 0.3);
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/vuex/3.0.1/vuex.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.5.16/vue.min.js"></script>
<div id="app">
<h2>Todos:</h2>
<ol>
<li v-for="todo in tasks">
<label>
<input type="checkbox"
v-on:change="toggle(todo)"
v-bind:checked="todo.done">
<del v-if="todo.done">
{{ todo.text }}
</del>
<span v-else>
{{ todo.text }}
</span>
</label>
</li>
</ol>
</div>
언급URL : https://stackoverflow.com/questions/50310009/vuex-store-does-not-update-component-collection-when-pushing-from-mutation
'sourcecode' 카테고리의 다른 글
VueJs 및 Larabel을 사용하여 여러 파일 업로드 (0) | 2022.08.07 |
---|---|
webpack,vue.dll,vue 파일을 컴파일할 수 없습니다. (0) | 2022.08.07 |
타입 번호의 입력에 대해서, 증감 처리를 덮어쓰는 방법이 있습니까? (0) | 2022.08.03 |
여러 스레드에서 stdlib의 rand() 사용 (0) | 2022.08.03 |
실제 예에서는 dup 또는 dup2를 사용합니다. (0) | 2022.08.03 |