2016-07-18 6 views
1

vuex 저장소를 사용하여 카운터 구성 요소에서 여러 카운터를 추가하는 버튼이있는 간단한 앱 구성 요소가 있다고 가정합니다.Vuex 게터에서 구성 요소 소품을 사용하는 올바른 방법은 무엇입니까?

Here is the whole thing on webpackbin.

당신이 구성 요소의 속성을 통해 넘겨되는 ID로 vuex 게터를 사용하려면 나누었다 vuex git repo에서 기본 카운터 예를 들어 같은 비트, 당신은 어떻게 할 것인가?

getter는 순수한 함수 여야하므로 this.counterId을 사용할 수 없습니다. 공식 문서에 따르면 계산 된 속성을 사용해야하지만 그 중 하나는 작동하지 않는 것으로 보입니다. 이 코드는 getter에 대해 정의되지 않은 값을 반환합니다.

import * as actions from './actions' 

export default { 
    props: ['counterId'], 
    vuex: { 
     getters: { 
      count: state => state.counters[getId] 
     }, 
     actions: actions 
    }, 
    computed: { 
     getId() { return this.counterId } 
    }, 
} 
+0

코드가 잘 될 것 같다. "getId"계산 된 속성 뒤에있는 아이디어는 사용자가 주 속성 대신 구성 요소의 속성을 사용하는 것입니다. 당신의 경우에, 당신은 둘 다하고 있습니다. 아무 문제가 없지만 getId()를 호출 할 때 로직에주의를 기울여야하고 그로부터 무엇을 얻고 있는지를 고려해야합니다. –

+0

id는 배열 색인 일뿐입니다. 계산 된 속성 자체가 잘 작동합니다. 그 getter 여전히 undefined 반환하므로 뭔가 잘못되어야합니다. 정의에 의해 getter에서'this'를 사용할 수 없기 때문에 계산 된 속성을 사용하고 있습니다. – Chris

답변

4

게터는 순수한 함수 여야하며 구성 요소 상태에 의존하지 않아야합니다.

당신은 여전히 ​​상자는 계산 된 게터에서 소품, 직접 가게를 사용할 수 있습니다

//option A 
export default { 
    props: ['counterId'], 
    vuex: { 
     getters: { 
      counters: state => state.counters 
     }, 
     actions: actions 
    }, 
    computed: { 
     currentCounter() { return this.counters[this.counterId] } 
    }, 
} 

//option B (better suited for this simple scenario) 
import store from '../store' 
computed: { 
    currentCounter() { 
    return store.state.counters[this.counterId] 
    } 
} 
+0

webpackbin [버전 A] (http://www.webpackbin.com/NkgzMe8Db) - [버전 B] (http://www.webpackbin.com/NyXxnxUPW) 에 두 버전을 추가 일반적으로 작동하지만 돌연변이 카운터를 업데이트하지 마십시오. 카운터를 몇 번 증가시킬 수 있으며 AddCounter 함수를 사용하여 새 카운터를 추가 할 때만 업데이트됩니다. – Chris

+0

그것은 돌연변이의 문제였습니다. Vue가 감지 할 수없는'state.counter [counterId] ++'로 값을 증가 시켰습니다 (http://vuejs.org/guide/list.html#Caveats). 대신 .splice()를 사용했고 작동합니다 : http://www.webpackbin.com/Vy_BMMIwZ (카운터를 받기 위해 Couter.vue를 변경했습니다) –

+0

자, 맞았습니다. state.counters를 사용하는 것을 잊어 버렸습니다. store 객체 mutation에서 ++ 대신에 $ set (counterId, state.counters [counterId] + 1)을 사용합니다 ... – Chris

관련 문제