programing

다른 모듈의 돌연변이로 rootState에 액세스합니다.

randomtip 2023. 2. 4. 08:29
반응형

다른 모듈의 돌연변이로 rootState에 액세스합니다.

몇 개 있어요vuex모듈.간단하게 하기 위해서, 내가 직면하고 있는 문제의 예를 들면 다음과 같습니다.

2개 있어요.vuex모듈 firstModule.js 및 secondModule.js

firstModule.js에는myArray[ ]상태:

//firstModule

const state = {
    myArray: [//has some items]
} 

second Module.js에는 외부 API에서 비동기적으로 데이터를 가져오는 액션이 있습니다.

이 작업은 가져온 데이터가 firstModule에 있는지 여부를 검색해야 하는 변환을 커밋합니다. myArray[ ]

  • 가져온 데이터가 firstModule에 있는 경우 myArray[ ]second Module's에 추가합니다. newArray[ ]

    const state = {
        newArray: []
    }
    
    const mutations = {
        addToNewArray: (state, payload) => {
            function findIyem(value){
                return value === payload.data;
            };    
    
            var item = payload.rootData.myArray.find(findItem);
            state.newArray.push(payload.data);
        }
    }
    
    const actions = {
        fetchData: ({commit, rootState}) => {
            // fetches some data from external API
            var fetched data = data // data is which I received from fetching
    
            commit('addToAnotherArray', {data: data, rootData: rootState.firstModule.myArray}
        }
    }
    

하지만, 여기 문제가 있습니다.

  • 모듈 내의 docs 돌연변이에 따르면 rootState에는 액세스 할 수 없습니다.액션과 getter만이 rootState에 액세스 할 수 있습니다.

  • rootAtate in modiate에 액세스 할 수 없습니다.상기와 같이 논리를 실행하려면 어떻게 해야 합니까?

  • 위에서와 같이 액션으로 rootState에 접속하여 커밋된 변환에 payload로 전달해야 합니까?

내 경험상, 돌연변이는...vuex모듈이 설명하는 방식으로 모델에 직접 영향을 미칠 수 있습니다.그래서, 당신의addToNewArray방법은 단순히 payload 데이터를 주의 데이터에 추가해야 합니다.newArray소유물.

작업은 돌연변이를 만들 것인지 여부를 결정하기 위해 논리 코드를 실행해야 하는 곳입니다.첫 번째 모듈로 계산하실 수 있습니다.myArray의 범위 내에서fetchData액션.그게 베스트 프랙티스야.

단, 꼭 액세스 할 필요가 있는 경우는,rootState현재와 같이 변수 참조로 전달해야 합니다.

언급URL : https://stackoverflow.com/questions/43494663/access-rootstate-in-mutations-of-different-modules

반응형