sourcecode

상태가 처음 변경된 후 계산된 값이 반응을 멈춥니다.

copyscript 2022. 7. 28. 23:42
반응형

상태가 처음 변경된 후 계산된 값이 반응을 멈춥니다.

내 컴포넌트에는showTrigger계산된 속성 및saveDataToStore갱신하는 메서드를 지정합니다.

computed: {
  showTrigger() {
    if (typeof store.getters["applicationBuilder/getTriggerById"](this.id) === "undefined") {
      return false;
    }
    return store.getters["applicationBuilder/getTriggerById"](this.id).show;
  }
},
methods: {
  saveDataToStore(info) {
    const trigger = {
      id: this.id,
      type: this.selected.type,
      info: info,
      show: false
    };
    store.dispatch('applicationBuilder/updateTriggerById', trigger);
  }
}

내 저장소 파일:

const state = {
  triggers: []
};

const getters = {
  getTriggerById: (state) => (id) => {
    return state.triggers.find(trigger => trigger.id === id)
  }
};

const actions = {
  updateTriggerById({commit}, payload) {
    commit('mutateTriggerById', payload);
  }
};

const mutatations = {
  mutateTriggerById(state, payload) {
    let index = state.triggers.findIndex(trigger => trigger.id === payload.id)
    state.triggers[index].id = payload.id;
    if (typeof payload.type !== "undefined") {
      state.triggers[index].type = payload.type;
    }
    if (typeof payload.info !== "undefined") {
      state.triggers[index].info = payload.info;
    }
    if (typeof payload.show !== "undefined") {
      state.triggers[index].show = payload.show;
    }
  }
};

처음에 요소를 배열에 설정하면 showTrigger가 변경을 받아들입니다.하지만 다음에 바뀔 때마다show의 특성trigger어레이에서 get in calculated value를 실행하고 있지 않습니다.

어레이를 시작하는 방법을 변경해야 합니까?다음과 같은 상태에서 어레이의 기본값을 설정하면 도움이 되지 않습니다.

triggers: [
  {
    id: null, 
    show: false, 
    info: {}, 
    type: null
  }
],

내가 뭘 잘못하고 있지?

당신의 코드를 테스트한 후, 제 생각엔mutation추가하다payload처음에 문제를 해결하고computed매번 속성이 업데이트되기 시작했습니다.

const mutations = {
  mutateTriggerById(state, payload) {
    let index = state.triggers.findIndex(
      (trigger) => trigger.id === payload.id
    );
    if(state.triggers[index]) {
      state.triggers[index].id = payload.id;
      if (typeof payload.type !== "undefined") {
        state.triggers[index].type = payload.type;
      }
      if (typeof payload.info !== "undefined") {
        state.triggers[index].info = payload.info;
      }
      if (typeof payload.show !== "undefined") {
        state.triggers[index].show = payload.show;
      }
    }else{
      state.triggers.push(payload);
    }
  }
};

언급URL : https://stackoverflow.com/questions/65870651/computed-value-stops-reacting-after-the-first-change-in-the-state

반응형