Vuex axi에서 어레이 업데이트 발생
나는 현재 VueJS vuex와 Axios에 문제가 있다.
나는 공리가 있는 배열을 얻고 있다. -> 이런 식으로 아이들을 채우기 위해 그 배열을 반복한다: "루브리크"는 많은 자기 관계를 가지고 있기 때문에 한 루브릭이 여러 아이를 가질 수 있다.
액션:
actions: {
get_main_rubriques: ({ commit }) => {
axios.get('http://localhost:8180/unv-api/rubrique/search/rsql?query=niveau==1')
.then(resp => {
let results = resp.data._embedded.rubriques
results.forEach(element => {
axios.get('http://localhost:8180/unv-api/rubrique/search/rsql?query=idpere==' + element.id)
.then((result) => {
element.childs = result.data._embedded.rubriques
})
.catch((err) => {
console.log(err)
})
})
console.log(results)
commit('MUTE_MAIN_RUBRIQUES', results)
})
.catch(err => {
console.log(err)
})
}
}
돌연변이:
MUTE_MAIN_RUBRIQUES: (state, rubrique) => {
state.rubriques = rubrique
}
APP.VUE
computed: {
...mapState([
'rubriques'
])
},
created: function () {
this.$store.dispatch('get_main_rubriques')
}
<b-dropdown v-for="item in rubriques" :key="item.id" v-bind:text="item.libelle" id="ddown1" class="m-md-1">
<b-dropdown-item-button v-for="child in item.childs" :key="child.id" v-bind:text="child.libelle">
{{ child.id }} - {{ child.libelle }}
</b-dropdown-item-button>
</b-dropdown>
문제: 부모 드롭다운은 문제 없이 표시되지만 자녀는 그렇지 않고, 상태도 표시되지 않지만, 다음 단계에 있음console.log(results)
전에commit
내 행동으로는
내가 뭘 잘못하고 있나요?고마워요.
움직이다commit('MUTE_MAIN_RUBRIQUES', results)
안쪽에 앉다then
응답을 받은 후 실행되도록 하려면:
actions: {
get_main_rubriques: ({ commit }) => {
axios.get('http://localhost:8180/unv-api/rubrique/search/rsql?query=niveau==1')
.then(resp => {
let results = resp.data._embedded.rubriques
results.forEach(element => {
axios.get('http://localhost:8180/unv-api/rubrique/search/rsql?query=idpere==' + element.id)
.then((result) => {
element.childs = result.data._embedded.rubriques;
console.log(results);
commit('MUTE_MAIN_RUBRIQUES', results);
})
.catch((err) => {
console.log(err)
})
})
})
.catch(err => {
console.log(err)
})
}
}
왜 당신의 방식대로 작동하지 않는지 이해하려면 약속과 비동기적 운영에 대해 자세히 읽어보십시오.
기본적인 문제는 계산된 속성이 딥 워치를 하지 않는다는 것이다. 어레이의 계산된 속성은 트리거하기 어렵다.
이 코드
computed: {
...mapState([
'rubriques'
])
}
모체 참조rubriques
그것을 배열하고 감시하지만 아동 재산은 보지 않는다.childs
.
콘솔을 보면 값이 '바로 지금' 업데이트된다는 정보를 나타내는 작은 'i'가 보일 수 있다.이것은 당신이 그것을 볼 때, 그것은 이미 어린이의 가치를 가지고 있다는 것을 의미한다 - 그러나 그것은 아마도 어린이의 가치관을 가지고 있을 때는 그렇지 않을 것이다.commit()
달리다
그래서 부모님들이 추가되고 당신의 자녀들이 계속 뛰지만 부모에 대한 언급이 있기 때문에 결국 아이들은 가게로 정확하게 추가된다.
이를 처리하는 한 가지 방법은 다음과 같은 기능을 사용하는 심층 감시자를 추가하는 것이다.$forceUpdate()
DOM을 다시 렌더링하다
watch: {
rubriques: {
handler: function (after, before) {
this.$forceUpdate()
},
deep: true,
}
}
@Efrat의 대답은 아마도 더 나을 것이다 - 당신은 부모를 상점에 올리기 전에 모든 아동 데이터를 효과적으로 기다릴 것이다.이렇게 하면 DOM 새로 고침(코드 수 감소)이 한 개뿐입니다.
참조URL: https://stackoverflow.com/questions/53393533/vuex-axios-issue-array-updates
'programing' 카테고리의 다른 글
Vuex에 있는 다른 이름의 getters에 액세스하는 방법 (0) | 2022.04.11 |
---|---|
Vue JS - v-for 내부에서 모델링할 선택 옵션 값 바인딩 (0) | 2022.04.11 |
프로덕션 빌드에서 js 및 css 파일의 파일 경로 변경 (0) | 2022.04.11 |
구성 요소 내부 구성 요소에서 호출 방법 (0) | 2022.04.11 |
돌연변이의 페이로드 인수만 사용하여 Vuex 상태를 수정해도 되는가? (0) | 2022.04.11 |