source

vuex 저장소의 일부를 작업 페이로드로 디스패치하는 것이 올바른가?

nicesource 2022. 11. 5. 17:26
반응형

vuex 저장소의 일부를 작업 페이로드로 디스패치하는 것이 올바른가?

vuex 스토어에 대해 몇 가지 질문이 있습니다.

export default {
    state: {
        resultSet: [
            {
                name: "result 1"
                deep: {
                    inside: {
                        isLoading: false
                    }
                }
            },
            {
                name: "result 2"
                deep: {
                    inside: {
                        isLoading: false
                    }
                }
            },
        ]
    },
    actions: {
        /*
        r is an item of the resultSet in the store (so r is a part of the store)
        */
        sendQuery(context, r) {
            //Here I mutate r directly (it means that I mutated the store directly without commit a mutation)

            r.deep.inside.isLoading = true;

            //Everything work, the UI is updated along with the state changes, but I'm not sure that 
            //I'm doing the right thing (mutate the store indirectly without committing a mutation)
        }
    }
}

질문:

  1. 스토어의 일부를 액션 페이로드로 디스패치하는 것이 올바른가?=> 액션은 r의 상태를 직접 변경할 수 있습니다.

  2. 변이하는 것이 옳은가?r.deep.inside.isLoading=true위 액션에서?

  1. 스토어의 일부를 액션 페이로드로 디스패치하는 것이 올바른가?=> 액션은 r의 상태를 직접 변경할 수 있습니다.

주(州)가 탑재되어 있는 것은 괜찮습니다.그러나 액션은 상태를 직접 수정할 수 없습니다.

  1. 변이하는 것이 옳은가?r.deep.inside.isLoading=true위 액션에서?

아니요. 문서로부터:

상태를 변환하는 대신, 동작은 돌연변이를 커밋합니다.

작업은 돌연변이(Vuex의 "이벤트 버스" 및/또는 뮤텍스)만 커밋해야 합니다.

(이벤트 자체와 유사한) 액션이 다른 이벤트와 유사한 것을 디스패치하는 것은 어리석게 보일 수 있지만, 변환 이벤트("commits")는 어떻게 동기화되어야 하는지와 같은 특별한 규칙이 있는 반면 액션은 돌연변이를 커밋하기 전에 비동기 태스크를 수행할 수 있습니다.

개발 중에 strict 모드를 활용하면 상태를 잘못 수정할 때 Vuex에서 확실하게 알립니다.

언급URL : https://stackoverflow.com/questions/52127679/is-it-right-to-dispatch-a-part-of-the-vuex-store-as-a-payload-of-an-action

반응형