Vue компонент не обновляется при изменении состояния - PullRequest
0 голосов
/ 15 марта 2019
<div v-for="(photon, key) in $store.state.notConnected" v-bind:key="key">
    <div v-if="!photon.connected">
        <p>Photon is not Connected</p>
    </div>
    <div v-if="photon.connected">
        <p>Photon is Connected</p>
        <b-btn v-on:click="showNewSetup(photon)>Setup</b-btn>
    </div>
    <div v-if="photon.showSetup">Setup Page</div>
</div>    

Store.js

export const store = new Vuex.store({
 state:{
   notConnected:{}
 },
 mutations:{
 setDevices(state,value){
 value.data.forEach(ele =>{
 state.notConnected[ele.id]={}
 state.notConnected[ele.id].showSetup=false
 state.notConnected[ele.id].connected=ele.connected
 }
 },
 SHOWNEWSETUP(state,value){
  state.notConnected[value.id].showSetup=true
}}
actions:{
async getDevices(context){
let devices = await axios.get('http:10.10.10.1:3000/api')
context.commit('setDevices',devices)
}
}
})

Я изменяю состояние в моем хранилище vuex, но v-if не отражает обновленное состояние.Когда я открываю инструменты vue dev, я вижу, что произошла мутация, и вижу, что состояние изменилось, но div страницы установки не обновляется.

Примечание. Если я иду по другому маршруту и ​​возвращаюсь кстраница, которую обновляет компонент

Ответы [ 2 ]

1 голос
/ 15 марта 2019

Попробуйте использовать вычисляемое свойство в вашем компоненте вместо прямого указания на состояние:

<template>
    <div v-for="(photon, key) in photons v-bind:key="key">
        <div v-if="!photon.connected">
            <p>Photon is not Connected</p>
    </div>
    <div v-if="photon.connected">
        <p>Photon is Connected</p>
        <b-btn v-on:click="showNewSetup(photon)>Setup</b-btn>
    </div>
        <div v-if="photon.showSetup">Setup Page</div>
    </div>   
</template>

<script>
    computed: {
        photons() {
            return this.$store.state.notConnected
        },
    }
</script>
1 голос
/ 15 марта 2019

Vue не имеет возможности обнаружить изменения в массивах (кроме vue3 с поддержкой прокси).

Вот почему вы должны изменить свою мутацию на:

SHOWNEWSETUP(state,value){
  Vue.set(state.notConnected, value.id, {showSetup=true})
}

Таким образом, система реактивности Vue информируется об изменениях, и все должно работать как положено.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...