[解決済み] Vuexストアのミューテーションの1つからコミットを呼び出すことはできますか?
2022-11-23 07:31:49
質問
私は vuex のストアを、以下のようにします。
import spreeApi from '../../gateways/spree-api'
// initial state
const state = {
products: [],
categories: []
}
// mutations
const mutations = {
SET_PRODUCTS: (state, response) => {
state.products = response.data.products
commit('SET_CATEGORIES')
},
SET_CATEGORIES: (state) => {
state.categories = state.products.map(function(product) { return product.category})
}
}
const actions = {
FETCH_PRODUCTS: (state, filters) => {
return spreeApi.get('products').then(response => state.commit('SET_PRODUCTS', response))
}
}
export default {
state,
mutations,
actions
}
変異を呼び出したい。
SET_CATEGORIES
を変異から呼び出したい。
SET_PRODUCTS
しかし、これは私にエラーを与える。
projectFilter.js:22 Uncaught (in promise) ReferenceError: commit is not defined(...)
これを行うための正しい方法は何でしょうか。試しに
store.commit
と
this.commit
などがありますが、これらも同様のエラーが発生します。
どのように解決するのですか?
すでに突然変異をおこしている場合、その突然変異をおこすには
commit
別の突然変異を行うことはできません。変異は状態を変更する同期呼び出しです。1つの変異の中では、別の変異をコミットすることはできません。
VuexのAPIリファレンスはこちらです。 https://vuex.vuejs.org/en/api.html
見ての通り、突然変異ハンドラは
state
と
payload
であり、それ以上ではありません。したがって、あなたは
commit
として
undefined
.
上記のケースでは、PRODUCTとCATEGORIESを同じ変異ハンドラの一部として、単一のコミットとして設定することができます。以下のコードが動作するか試してみてください。
// mutations
const mutations = {
SET_PRODUCTS_AND_CATEGORIES: (state, response) => {
state.products = response.data.products
state.categories = state.products.map(function(product) { return product.category})
},
// ...
}
EDITです。 の提供する以下の回答を参照してください。 ダニエル・S・デボア . 正しい方法は、彼の回答にあるように、1つのアクションから2つの変異をコミットすることです。
関連
-
[解決済み] 配列から特定の項目を削除するにはどうすればよいですか?
-
[解決済み] あるAngularJSのコントローラが別のコントローラを呼び出すことはできますか?
-
[解決済み】vuexからストアの値を監視する方法は?
-
[解決済み] jqueryでdivの要素がオーバーフローしていないかチェックする
-
[解決済み] Angularjs - 現在の日付を表示する
-
[解決済み] アサインの左側にJavascriptのオブジェクトブラケット表記({ ナビゲーション } =)があります。
-
[解決済み] javascript includes() 大文字小文字を区別しない
-
[解決済み] Node.jsのES6クラスをrequireで作る
-
[解決済み] JavaScript で `throw` の後に `return` をする必要がありますか?
-
[解決済み] V8 Javascript エンジンのスタンドアロン実行
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] チェックボックスが選択されているかどうかを確認するjQuery
-
[解決済み] TypeScriptのdeclare classとinterfaceの違いとは?
-
[解決済み] Javascript / jQueryでAndroid端末を検出する。
-
[解決済み] JavaScript のオブジェクトの配列を比較し、最小値/最大値を取得する
-
[解決済み] Reactメモを使うべきではない場合とは?
-
[解決済み] 各オブジェクトに?重複
-
[解決済み] CORS: 認証モードは 'include' です。
-
[解決済み] JavaScript で `throw` の後に `return` をする必要がありますか?
-
[解決済み] JavaScript で css プロパティを使用して HTML 要素の背景色を設定する方法
-
[解決済み] querySelectorAllがない場合、ライブラリを使用せずに属性で要素を取得する?