programing

vuex 변환에서 값을 반환하시겠습니까?(새로 생성된 객체의 ID)

prostudy 2022. 7. 17. 17:43
반응형

vuex 변환에서 값을 반환하시겠습니까?(새로 생성된 객체의 ID)

vuex 스토어의 한 부분에 개체를 만들고 ID를 다른 개체로 전달하려고 하는데, 돌연변이가 아무것도 반환하지 않기 때문에 이 경우에는 ID를 반환할 수 없습니다.

두 개의 스토어 오브젝트는 다음과 같습니다.

// store/report.js
const state = {
    name: 'Untitled Report',
    subReportIds: []
};

// store/subReport.js
const state = { ... }

그리고 이 작업을 통해 빈 보고서를 만들고, 다음으로 빈 하위 보고서를 만들고, 새로 생성된 보고서에 하위 보고서 ID를 할당합니다. (하위 보고서는 독립 엔티티이며, 여러 보고서에서 사용할 수 있으므로 저장 영역이 다릅니다.)

const actions = {
    createNewReport({ state, commit }) {
        commit(mutationTypes.CREATE_NEW_REPORT)
        // below doesn't work - i can't get return from mutation
        let newSubreportId = commit(mutationTypes.ADD_NEW_SUBREPORT)
        // if this worked, i'd then do something like
        commit(mutationTypes.ADD_SUBREPORT_TO_REPORT, newSubreportId)
    }
};

어떻게 하면 위와 같은 일을 할 수 있을까요?

그러니 내게 가장 좋은 방법은 돌연변이를 저지르는 대신 행동을 취하는 거야Vuex 소스의 메서드를 보면commit반환하지 않고 실행(공허도 마찬가지)만 합니다.dispatch액션에서 반환하는 값(함수)을 반환합니다.

제 행동에 대해서는, 위에서 말한 것처럼 작문할 수 있도록, 항상 약속을 되돌립니다.여기 예가 있습니다.

fetchSomething ({ commit }) {
  return mockApiGetIds()
    .then(response => {
      commit({
        type: SOME_MUTATION,
        ids: response
      });
    
      return response;
    });
  },

면책사항: 사실 좋은 생각인지는 모르겠지만, 적어도 효과가 있는 것 같고, 나에게 있어 행동과 약속을 사용하거나 행동에서 아이디를 생성하는 것보다 더 예쁘다고 느껴집니다.

당신의 돌연변이로, 당신은 논쟁을 통과할 수 있습니다.변환에서 값을 반환하려면(새로 생성된 ID와 같이) 해당 인수의 자리 표시자에 씁니다.

someMutation(state, arg){
   //...
   arg.out = {
      status : "succeed"
   }
}

//...

this.$store.commit('someMutation', arg);
if(arg.out !== "succeed") console.log("ERROR");

돌연변이를 끝내고 돌아오는 것만으로도 효과가 있으면 좋을 텐데...

문제를 추적하는 업투표를 해주세요.https://github.com/vuejs/vuex/issues/1437

향후에는 다음과 같은 일이 발생할 수 있습니다.

let myReturn = this.$store.commit('ADD_THING",{"name":"new_thing"});
// 'ADD_THING' adds a thing to an numerically indexed object and then returns the number.
console.log(myReturn); // {"id":42,"datestamp":1541145883085}

언급URL : https://stackoverflow.com/questions/42404925/return-value-from-vuex-mutation-id-for-newly-created-object

반응형