2016-07-18 6 views
1

vuexストアを使用してカウンタコンポーネントから複数のカウンタを追加するボタン付きの単純なアプリケーションコンポーネントがあるとします。Vuexゲッターでコンポーネントの小道具を使用する正しい方法は何ですか?

Here is the whole thing on webpackbin.

は、コンポーネントのプロパティを経由して渡されるIDとvuexゲッターを使用したい.But 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"の計算されたプロパティの背後にある考え方は、あなたの状態からではなく、Componentのプロパティを使うことです。あなたの場合、あなたは両方をしています。何も問題はありませんが、getId()を呼び出すときにはロジックに注意を払い、何から得るのですか。 –

+0

idは配列のインデックスに過ぎません。計算されたプロパティ自体が正常に動作します。 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オブジェクトを使用するのを忘れていました。storeオブジェクトのmutationsの++の代わりに$ set(counterId、state.counters [counterId] + 1) – Chris

関連する問題