UNPKG

vuex-help

Version:

a utilies library reduce boilerplate for vuex

1 lines 1.55 MB
{"index":{"version":"0.5.12","fields":[{"name":"title","boost":10},{"name":"keywords","boost":15},{"name":"body","boost":1}],"ref":"url","documentStore":{"store":{"./":["api","introduct","typescript","vue@2.5+","vuex","が必須、逆もまた同様です。","と","とは何か?","アクション","アプリケーションの構造","インストール","ゲッター","コアコンセプト","ステート","テスト","フォームの扱い","プラグイン","ホットリローディング","ミューテーション","モジュール","ユーザ向けは、vuex@3.0+","リファレンス","リリースノート","入門","厳格モード","注意:"],"installation.html":["'vue'","'vuex'","/","add","build","cd","cdn","clone","git","github","https://github.com/vuejs/vuex.git","https://unpkg.com/vuex","import","instal","node_modules/vuex","npm","run","save","unpkg.com","url","vue","vue.use()","vue.use(vuex)","vuex","yarn","から直接クローンし","が導入されます:","で","によって","によって特定のバージョン/タグを利用することもできます。","のあとで","のような","の最新のリリースを指します。https://unpkg.com/vuex@2.0.0","を取り込むと自動的に","を明示的に導入する必要があります:","を自身でビルドする必要があります。","インストール","グローバルなスクリプトタグを利用する場合にはこのようにする必要はありません。","ベースの","モジュールシステムで利用される場合、","リンクが提供されています。上記リンクは常に","最新の開発版ビルドを利用したい場合には、","直接ダウンロードする","開発版ビルド"],"intro.html":["\"ビュー\"","\"状態管理パターン\"とはなんですか?","()","(props)","+","//","0","`","`,","abramov","action","architectureから影響を受けています。","count","count:","data","elm","flux","increment","methods:","new","redux","return","sourc","spa","state","template:","this.count++","truth)です。","view","vue","vue({","vue.j","vuex","{","{{","}","})","},","}}","いつ、vuexを使うべきでしょうか?","からの良い引用です:","が必要なだけかもしれません。しかし、中規模から大規模の","これが","これにより、コンポーネントツリーは大きな","これはいくつかの要素をアプリ自身に含んでいます:","これは予測可能な方法によってのみ状態の変異を行うというルールを保証し、アプリケーション内の全てのコンポーネントのための集中型のストアとして機能します。","これらは\"単方向データフロー\"のコンセプトの極めてシンプルな責務です:","さらに、状態管理に関わる概念を定義、分離し、特定のルールを敷くことで、コードの構造と保守性を向上させることができます。","しかし、単純さは、共通の状態を共有する複数のコンポーネントを持ったときに、すぐに破綻します:","そして","それらが必要になったときに知るのです。","では、コンポーネントから共有している状態を抽出し、それをグローバルシングルトンで管理するのはどうでしょうか?","で作られたカウンターアプリをみてみましょう:","として深く入れ子になったコンポーネントに渡すのは面倒で、兄弟コンポーネントでは単純に機能しません。二つ目は、親子のインスタンスを直接参照したり、イベントを介して複数の状態のコピーを変更、同期することを試みるソリューションに頼っていることがよくあります。これらのパターンは、いずれも脆く、すぐにメンテナンスが困難なコードに繋がります。","となり、どのコンポーネントもツリー内のどこにあっても状態にアクセスしたり、アクションをトリガーできます!","とは何か?","とは何か?","なしで問題ないでしょう。単純な","の作者、dan","の粒度の細かいリアクティビティシステムを利用するよう特別に調整して実装されたライブラリだということです。","の背景にある基本的なアイディアであり、flux、","は","は、共有状態の管理に役立ちますが、さらに概念やボイラープレートのコストがかかります。これは、短期的生産性と長期的生産性のトレードオフです。","は効率的な更新のために、vue.j","は自然な次のステップとなるでしょう。これは","また","もし、あなたが大規模な","を導入した場合、冗長で恐ろしいと感じるかもしれません。そう感じることは全く普通です。あなたのアプリがシンプルであれば、vuex","を構築することなく、vuex","を構築する場合は、vue","アクション、これはビューからのユーザー入力に反応して、状態の変更を可能にする方法です。","アプリケーションのための","グローバルイベントバス","コンポーネントの外の状態をどうやってうまく扱うか考える絶好の機会です。vuex","ビュー、これは状態のただの宣言的なマッピングです。","ライブラリです。","ライブラリは眼鏡のようなものです:","一つ目は、プロパティ","他のパターンと異なるのは、vuex","公式の開発ツール拡張と連携し、設定なしでタイムトラベルデバッグやステートのスナップショットのエクスポートやインポートのような高度な機能を提供します。","単純な","状態、これは私達のアプリを動かす信頼できる情報源(the","状態管理パターン","異なるビューからのアクションで、同じ状態を変更する必要があります。","複数のビューが同じ状態に依存することがあります。"],"getting-started.html":["(state)","//","0","1","2つあります。","=",">","console.log(store.state.count)","const","count:","es2015","increment","mutations:","new","state.count++","state:","store","store.commit","store.commit('increment')","store.st","store.state.count","vue.use(vuex)","vuex","vuex.store({","{","}","})","},","こちらが","これから","これで","してから、ストアをつくってみましょう。vuex","そして","でストアオブジェクトの状態を参照でき、また","のコアコンセプトについて詳しく説明していきます。まずは状態(state)からはじめましょう。","のシンタックスを利用しています。","は、基本的にアプリケーションの状態(state)を保持するコンテナです。単純なグローバルオブジェクトとの違いが","もし触れたことがなければ、ぜひ触れてください!","をインストール","を使った最も基本的なカウンターアプリの例です。","を呼び出していることを確認しておいてください","を直接変更する代わりにミューテーションをコミットする理由は、状態の変更を明確に追跡したいからです。このシンプルな規約は、あなたのコードの意図をさらに明確にし、コードを読んだ時にアプリケーションの状態の変更について、論理的に考えることができるようにします。加えて、私たちに全ての変更のログを取ったり、状態のスナップショットを取ったり、タイムトラベルデバッグを行うようなツールを実装する余地を与えてくれます。","アプリケーションの中心にあるものはストアです。\"ストア\"","コンポーネントがストアから状態を取り出すとき、もしストアの状態が変化したら、ストアはリアクティブかつ効率的に更新を行います。","シンプルなストア","ストアの作成は、とても簡単です。ストアオブジェクトの初期状態と、いくつかのミューテーションを準備するだけです。","ストアの状態を直接変更することはできません。明示的にミューテーションをコミットすることによってのみ、ストアの状態を変更します。これによって、全ての状態の変更について追跡可能な記録を残すことが保証され、ツールでのアプリケーションの動作の理解を助けます。","ストアはリアクティブです。vue","ストアオブジェクトの状態はリアクティブなので、ストアの状態をコンポーネント内で使うには算出プロパティ内でただ状態を返せば良いです。コンポーネントメソッドでミューテーションをコミットすることによって状態の変更を行います。","メソッドで状態の変更を行うことができます。","モジュールシステムを利用しているときはあらかじめ","入門","注意:","私たちは、このドキュメントのコード例に"],"core-concepts.html":["この章では、vuex","これらのコンセプトを深く理解することは、vuex","それでは、始めましょう!","のコアコンセプトについて、以下を学習します。","を使用するにあたって不可欠です。","アクション","ゲッター","コアコンセプト","ステート","ミューテーション","モジュール"],"state.html":["\"store\"","\"注入\"","'#app',","'count'","'count',","'vuex'","()","(ecmascript","(singl","(state)","(これは、","*/","+","...","...mapstate({","/*","//","3","=","=>","])","`","`this`","`{{","app","components:","comput","computed:","const","count","count:","countalias:","counter","countpluslocalst","default","dom","el:","export","import","localcomput","map","mapstat","mapstate([","mapstate({","new","return","sourc","state","state.count","state.count,","state.count`","store","store,","store.state.count","template:","this.$stor","this.$store.state.count","this.count","this.localcount","tree)を使います。つまり、この単一なオブジェクトはアプリケーションレベルの状態が全て含まれており、\"信頼できる唯一の情報源","truth)\"","vue","vue({","vue.use(vuex)","vuex","vuex.mapst","{","}","})","},","}}`,","からローカルステートを参照するときは、通常の関数を使わなければいけません","が変わるたび、算出プロパティの再評価が発生し、関連した","しかし、このパターンでは、コンポーネントがグローバルストアシングルトンに依存してしまいます。","する機構を提供しています:","で、シンタックスをかなり単純にできます:","です)","で各コンポーネントから参照することができます。","で有効にできます)、すべての子コンポーネントにストアを","で返すことです。","として公開されています","として機能します。これは、通常、アプリケーションごとに1つしかストアは持たないことを意味します。単一ステートツリーは状態の特定の部分を見つけること、デバッグのために現在のアプリケーションの状態のスナップショットを撮ることを容易にします。","と同じです","に渡すこともできます。","に渡せるように、複数のオブジェクトをひとつにマージするユーティリティを使わなければいけません。しかし、オブジェクトスプレッド演算子","に置くことで、状態の変更がさらに明示的、デバッグ可能になりますが、ときにはコードを冗長でまわりくどいものにします。状態の一部がひとつのコンポーネントだけに属している場合は、それをローカルの状態として残しておくとよいでしょう。あなたは、トレードオフを考慮した上で、あなたのアプリの開発ニーズに合った決定をすべきです。","に表示するにはどうすればよいのでしょう?","の中に置くべき、というわけではありません。多くの状態を","の実装を変更しましょう:","の更新をトリガーします。","の状態を","は、ルートコンポーネントに","はオブジェクトを返すことに注意しましょう。どうやって、他のローカル算出プロパティと組み合わせるのでしょうか?","はリアクティブなので、ストアから状態を\"取り出す\"一番シンプルな方法は、単純にいくつかのストアの状態を","は単一ステートツリー","を使うということは、全ての状態を","アロー関数は、コードをとても簡潔にできます!","オブジェクトスプレット演算子で、外のオブジェクトとこのオブジェクトを混ぜる","オブジェクトスプレッド演算子","オプションで指定されたストアは、全ての子コンポーネントに注入されます","オプションを指定することで","オプションを渡すことで、渡されたストアをルートの全ての子コンポーネントに注入します。これは","コンポーネント","コンポーネントが複数のストアのステートプロパティやゲッターを必要としているとき、これらすべてにおいて、算出プロパティを宣言することは繰り返しで冗長です。これに対処するため、算出ゲッター関数を生成し、いくつかのキーストロークを省くのに役立つ","コンポーネントに入れる","コンポーネントはまだローカルステートを持つことできる","コンポーネントをつくってみましょう","ステート","ストア","ストアにある状態を","プロポーサルの","ヘルパー","ヘルパーを使うことができます:","マップされた算出プロパティの名前がステートサブツリーの名前と同じ場合は、文字列配列を","モジュールシステムを使っているとき、ストアの状態を使っているすべてのコンポーネントでインポートが必要です。また、コンポーネントのテストのときにモック化が必要となります。","ルートインスタンスに","単一ステートツリー","単一ステートツリーはモジュール性と競合しません。以降の章で、アプリケーションの状態とミューテーション(変更)をサブモジュールに分割する方法について説明します。","完全ビルドでは、ヘルパーは","文字列を渡すことは、`state","算出プロパティ","通常、最終的にひとつのオブジェクトを"],"getters.html":["\"ゲッター\"","'...',","'anothergetter',","'donetodoscount'","'donetodoscount',","'vuex'","()","(id)","(state)","(state,","...","...mapgetters([","...mapgetters({","//","1","1,","2,","=","===","=>",">","[","[{","]","])","`store.getters.donetodoscount`","`this.donecount`","comput","computed:","const","default","done:","donecount:","donetodos:","donetodoscount","donetodoscount:","export","fals","getters)","getters.donetodos.length","getters:","gettodobyid:","id)","id:","import","mapgett","new","operator)を使って","return","spread","state","state.todos.filter(todo","state.todos.find(todo","state:","store","store.gett","store.getters.donetodo","store.getters.donetodoscount","store.getters.gettodobyid(2)","text:","this.$store.getters.donetodoscount","this.$store.state.todos.filter(todo","todo.done)","todo.done).length","todo.id","todos:","true","vuex","vuex.store({","{","}","})","},","}]","どのコンポーネントの内部でも簡単にゲッターを利用することができます:","にマッピングさせる","に組み込む","もしこの関数を複数のコンポーネントで利用したくなったら、関数をコピーするか、あるいは関数を共用のヘルパーに切り出して複数の場所でインポートする必要があります。しかし、どちらも理想的とはいえません。","を","を利用するとストア内に","を受け取ります:","を定義することができます。それらをストアの算出プロパティと考えることができます。算出プロパティと同様に、ゲッターの結果はその依存関係に基づいて計算され、依存関係の一部が変更されたときにのみ再評価されます。","オブジェクトから取り出されます:","ゲッター","ゲッターは","ゲッターは第1引数として、state","ゲッターは第2引数として他のゲッターを受け取ります:","ゲッターを、スプレッド演算子(object","ゲッターを異なる名前でマッピングさせたいときはオブジェクトを使います:","ヘルパー","ヘルパーはストアのゲッターをローカルの算出プロパティにマッピングさせます:","例えば項目のリストをフィルタリングしたりカウントするときのように、ストアの状態を算出したいときがあります。","関数を返り値にすることで、ゲッターに引数を渡すこともできます。これは特にストアの中の配列を検索する時に役立ちます:"],"mutations.html":["\"increment\"","\"タイプが","'./mutat","'increment'","'increment',","'incrementby'","'newprop',","'some_mutation'","'vuex'","(state)","(state,","+=","...","...mapmutations([","...mapmutations({","...state.obj,","//","1","10","10)","123","123)","2つのメソッドを両方呼び出すとき、それらがいつ呼び出されたか、どちらが先に呼び出されたかを、どうやって知ればよいのでしょう?これがまさに、状態変更と非同期の","2つの概念を分離したいという理由です。vuex","3","=","=>","[some_mutation]","]),","`this.$store.commit('increment')`","`this.$store.commit('incrementby',","`this.add()`","`this.increment()`","`this.incrementby(amount)`","add:","amount)`","amount:","api.callasyncmethod(()","const","count:","default","es2015","export","flux","import","increment","mapmut","methods:","mutat","mutations:","n","n)","name)機能を使用できます","new","newprop:","payload)","payload.amount","properti","silent:","some_mut","somemut","spread","state.count","state.count++","state.obj","state:","store","store.commit","store.commit('increment')","store.commit('increment',","store.commit({","store.j","syntax)","this.$store.commit('xxx')","true","type","type:","types'","types.j","vue","vue.set(obj,","vuex","vuex.store({","{","}","})","},","あらかじめ全ての必要なフィールドによって、ストアの初期状態を初期化することが望ましいです","いま、開発ツールのミューテーションのログを見ながら、アプリケーションのデバッグを行っていることを想像してください。全てのミューテーションをログに記録するためには、ミューテーションの前後の状態のスナップショットを捕捉することが必要です。しかし、上の例にあるミューテーション内の非同期コールバックは、それを不可能にします:","いろいろな","この機能は開発ツール内にミューテーション・フィルタが実装された後に非推奨になる予定です。","そのコールバックは、ミューテーションがコミットされた時点ではまだ呼び出されていません。そして、コールバックが実際にいつ呼び出されるかを、開発ツールは知る術がありません。いかなる状態変更でも、コールバック内で起きる場合は本質的に追跡不可能です。","では全てのミューテーションは同期的に行うという作法になっています:","といったイベント登録のようなものです。ミューテーションハンドラを起動するためにはミューテーションのタイプを指定して","と動作させているときと同じく、リアクティブな値に関する注意が必要であることを意味します:","と書くか、もしくはコンポーネントのメソッドを","によってリアクティブになっているので、状態を変更すると、状態を監視している","にマッピングする","に第3引数を渡すことで、特定のミューテーションをプラグインに気付かせないようにすること(\"silence\")ができます:","に追加の引数を渡すこともできます。この追加の引数は、特定のミューテーションに対するペイロードと呼びます:","のストアの状態を変更できる唯一の方法は、ミューテーションをコミットすることです。vuex","のスプレッドシンタックス(object","のミューテーションがトリガーされたときに、このハンドラが呼ばれる\"","のミューテーションは、通常の","のミューテーションはイベントにとても近い概念です:","のリアクティブなルールに則ったミューテーション","の注入が必要)で、コンポーネント内でミューテーションをコミットできます:","の状態(state)を第1引数として取得し、実際に状態の変更を行います:","の算出プロパティ名(comput","はペイロードサポートする:","ひとつの重要なルールを覚えておきましょう。それはミューテーションハンドラ関数は同期的でなければならないということです。なぜか?次の例で考えてみましょう:","ほとんどの場合、ペイロードはオブジェクトにすべきです。そうすることで複数のフィールドを含められるようになり、またミューテーションがより記述的に記録されるようになります:","また","を","を使用して、次のように書くことができます:","を使用する。あるいは","を呼び出す必要があります:","アクションへ向けて","オブジェクトスタイルでコミットするとき、オブジェクト全体がペイロードとしてミューテーションハンドラに渡されます。したがってハンドラの例は上記と同じです:","オブジェクトスタイルのコミット","オプションは、どちらかいうと","コンポーネントは自動的に更新されます。これは","コンポーネント内におけるミューテーションのコミット","サイレントコミット","ストアの状態は","デフォルトでは全てのコミットされたミューテーションはプラグイン(開発ツール等)に送られます。しかし場合によっては、プラグインに全ての状態の変化を記録して欲しくないこともあるでしょう。あるいは、短い間隔やポーリングでのストアへの複数のコミットも、常に追跡する必要はないでしょう。こうしたケースでは、store.commit","プロパティを持つオブジェクトを使って、ミューテーションをコミットすることもできます:","ヘルパーを呼び出すこと(ルートの","ミューテーション","ミューテーションによる状態変更は、この時点で行われるべきです","ミューテーションは同期的でなければならない","ミューテーション・タイプに定数を使用する","全く新しいオブジェクトで既存のオブジェクトを置き換える。例えば、stage","各ミューテーションはタイプとハンドラを持ちます。ハンドラ関数は","定数を使用するかどうかは好みの問題です。多くの開発者による大規模なプロジェクトで役に立ちますが、完全にオプションなので、もしお気に召さなければ使用しなくても構いません。","定数を関数名として使用できる","実装において、ミューテーション・タイプに定数を使用することが共通して見られるパターンです。これはコードに対してリントツールのようなツールを利用できるという利点があり、また単一ファイルに全ての定数を設定することによって、共同で作業する人に、アプリケーション全体で何のミューテーションが可能であるかを一目見ただけで理解できるようにします:","実際に","新しいプロパティをオブジェクトに追加するとき、以下のいずれかが必要です:","注意:","状態を変更する","状態変更を非同期に組み合わせることは、プログラムの動きを予測することを非常に困難にします。例えば、状態を変更する非同期コールバックを持った","直接ミューテーションハンドラを呼び出すことはできません。この","追加の引数を渡してコミットする","非同期的な命令を扱うためにアクションを見てみましょう。"],"actions.html":["'increment'","'increment',","'incrementasync',","'incrementby'","'vuex'","()","(context)","(state)","({",")","...","...mapactions([","...mapactions({","/","//","0","10","1000)","=","=>","[...state.cart.added]","]),","`actiona`","`getdata()`","`getotherdata()`","`mapactions`","`this.$store.dispatch('increment')`","`this.$store.dispatch('incrementby',","`this.add()`","`this.increment()`","`this.incrementby(amount)`","actiona","actionb","actions:","add:","amount)`","amount:","api","async","await","checkout","commit","commit('gotdata',","commit('gototherdata',","commit('increment')","commit('somemutation')","commit('someothermutation')","commit(types.checkout_failure,","commit(types.checkout_request)","commit(types.checkout_success),","commit,","const","context.commit","context.commit('increment')","context.gett","context.st","count:","default","destructuring)がよく使われます(特に","dispatch('actiona')","dispatch('actiona').then(()","dispatch,","es2015","export","getdata())","getotherdata())","import","increment","incrementasync","mapact","methods:","mutations:","new","products)","products,","promis","promise((resolve,","reject)","resolve()","return","savedcartitem","savedcartitems)","settimeout(()","shop","shop.buyproducts(","state","state.count++","state:","store","store.commit('increment')","store.dispatch","store.dispatch('actiona').then(()","store.dispatch('increment')","store.dispatch('incrementasync',","store.dispatch({","this.$store.dispatch('xxx')","type:","vuex.store({","{","}","})","},","が","がトリガーされたアクションハンドラによって返された","がトリガーとなって実行されます:","が完了するのを待機する","が戻り値として返ってくることになります。","これは一見ばかげて見えるかもしれません。つまり、カウントをインクリメントしたいときに、どうして直接","すると次のようにできます:","で、状態やゲッターにアクセスできます。なぜコンテキストオブジェクトがストアインスタンスそのものではないのかは、後ほどモジュールで説明します。","でコンポーネント内でアクションをディスパッチできます。あるいはコンポーネントのメソッドを","で異なるモジュール内の複数のアクションハンドラをトリガーすることができます。そのようなケースでは、全てのトリガーされたハンドラが解決されたときに解決する","と","にマッピングする","の呼び出しと、複数のミューテーションのコミットをします:","の引数分割束縛(argument","の注入が必要です):","は成功時のコールバックと失敗時のコールバックを受け取る","まず知っておくべきことは","また別のアクションで下記のように書くと:","もまた","もペイロードをサポートする:","や","より実践的な例として、ショッピングカートをチェックアウトするアクションを挙げます。このアクションは非同期な","を","を使用することで、次のようにアクションを組み合わせることができます:","を処理できることと、store.dispatch","を呼び出してミューテーションをコミットしないのか、と。ミューテーションは同期的でなければならないというのを覚えていますか?アクションはそうではありません。アクションの中では非同期の操作を行うことができます。","を呼び出すことでミューテーションをコミットできます。あるいは","を複数回呼び出す必要があるとき):","を返すことです。","を返すことを想定している","アクション","アクションのディスパッチ","アクションは","アクションは、状態を変更するのではなく、ミューテーションをコミットします。","アクションはしばしば非同期処理を行いますが、アクションが完了したことをどうやって知れば良いのでしょう?そしてもっと重要なことは、さらに複雑な非同期処理を取り扱うために、どうやって複数のアクションを構成させるかということです。","アクションはペイロード形式とオブジェクトスタイルのディスパッチをサポートします:","アクションはミューテーションと似ていますが、下記の点で異なります:","アクションは任意の非同期処理を含むことができます。","アクションを構成する","アクションハンドラはストアインスタンスのメソッドやプロパティのセットと同じものを呼び出せるコンテキストオブジェクトを受け取ります。したがって","オブジェクトを使ってディスパッチする","コンポーネント内でのアクションのディスパッチ","シンプルなアクションを登録してみましょう:","チェックアウトのリクエストを送信し、楽観的にカート内をクリアする","ヘルパーを使うこともできます(ルートの","ペイロードを使ってディスパッチする","一連の非同期の処理を実行しつつ、ミューテーションのコミットによってのみ副作用(状態の変更)を与えていることに注意してください。","失敗時の処理","実際にはコードを少しシンプルにするために","成功時の処理","最終的に","現在のカート内の商品を保存する"],"modules.html":["%","''","'bar'","'foo',","'foo/somegetter'","'foo/somemutation'","'foo/someotheraction'","'foo/someothergetter'","'mymodule'],","'once'","'pluginaction')","'some/nested/module/bar'","'some/nested/module/foo',","'somegetter'","'somemutation'","'someotheraction'","'someothergetter'","'vuex'","((state.count","()","(2.3.0","(ctx,","(option","(prefix)","(state)","(state,","(store)","({","*","+","...","...mapactions('some/nested/module',","...mapactions([","...mapstate('some/nested/module',","...mapstate({","//","///","0","1)","2","=","===","=>",">","[","])","`getters`","`modulea`","`moduleb`","`mymodule`","`nested/mymodule`","`root`","`some/nested/module`","`state`","a:","account:","actions:","b:","commit","commit('account/login')","commit('increment')","commit('somemutation')","commit('somemutation',","commit,","computed:","const","context","context.rootst","context.st","count:","createnamespacedhelp","createnamespacedhelpers('some/nested/module')","createplugin","creation)の際に宣言された、静的なモジュールはこのメソッドで削除できないことに注意してください。","data","default","dispatch('account/login')","dispatch('someotheraction')","dispatch('someotheraction',","dispatch,","doublecount","export","fals","foo:","function","getters,","getters.somegett","getters.someothergett","getters:","getters['account/isadmin']","getters['account/posts/popular']","getters['account/profile']","getters、dispatch、commit","import","increment","incrementifoddonrootsum","isadmin","login","mapact","mapmut","mapstate,","mapstate、mapgetters、mapactions、そして","methods:","module,","modulea","modulea,","moduleb","modules:","mutations:","mypage:","myreusablemodul","namespac","namespaced:","new","null,","options.namespac","payload)","popular","posts:","preservestate:","profil","return","root:","rootgett","rootgetters)","rootgetters.somegett","rootgetters.someothergett","rootstat","rootstate)","rootstate,","rootstate.count","rootstate.count)","router","runinnewcontext","someact","somegett","someotheract","someothergetter:","state","state,","state.a,","state.b","state.count","state.count++","state.some.nested.module.a,","state.some.nested.module.b","state:","store","store.dispatch(namespac","store.registermodul","store.registermodule('mymodule',","store.registermodule(['nested',","store.state.a","store.state.b","store.state.mymodul","store.state.nested.mymodul","store.unregistermodule(modulename)","sumwithrootcount","sync","true","true,","true}","vue","vuex","vuex.store({","{","{root:","{})","||","}","})","}))でこれを実現できます。","},","このような場合は、第1引数としてモジュールの名前空間文字列をヘルパーに渡すことで、そのモジュールをコンテキストとして使用してすべてのバインディングを行うことができます。上記は次のように単純化できます。","これにより、複数のモジュールが同じミューテーション/アクションタイプに反応することができます。","これは、実際には","さらに、createnamespacedhelp","さらに名前空間をネストする","そして、vuex","そのような場合に役立てるため","ではステートフルなシングルトンは避けます。)","ではストアをモジュールに分割できるようになっています。それぞれのモジュールは、モジュール自身の状態(state)、ミューテーション、アクション、ゲッター、モジュールさえも内包できます(モジュールをネストできます)","でアクセスします。","でアクセスできます:","と","と全く同じ問題です。従って解決策も同じです。モジュールの状態を宣言するために関数を使用してください","によって名前空間に分けることができます。モジュールが登録されると、そのゲッター、アクション、およびミューテーションのすべてが、モジュールが登録されているパスに基づいて自動的に名前空間に入れられます。例えば:","の3番目の引数として","のとき、ssr","のステート","はこのモジュールのゲッターにローカライズされています","はゲッター関数の第3引数と第4引数として渡され、アクション関数に渡される","はモジュールのローカルステート","はローカルステートにアクセスでき、ルートのステートは","また、モジュールのゲッターの中では、ルートのステートは第3引数でアクセスできます:","または","を使うことができます","を使用することによって名前空間付けされたヘルパーを作成できます。指定された名前空間の値にバインドされた新しいコンポーネントバインディングヘルパーを持つオブジェクトを返します:","を受け取ります。言い換えれば、同じモジュールに接頭辞","を呼び出せば、動的に登録したモジュールを削除できます。ただしストア作成(store","を書き込まずに、モジュールアセットを使用することができます。名前空間オプションの切り替えは、モジュール内のコードには影響しません。","を活用できます。例えば","を渡します。","を統合しています。","を調べます","アクションをディスパッチするか、グローバル名前空間にミューテーションをコミットするには、dispatch","オブジェクトのプロパティとしても公開されます。","オプション(store.registermodule('a',","オプションが","オプションを受け入れます","グローバルステートとゲッターを使いたい場合、rootstat","ゲッターの第4引数経由で","コンポーネント内部の","サーバサイドレンダリングされたアプリケーションから状態を保持するなど、新しいモジュールを登録するときに、以前の状態を保持したい場合があります。preservest","ストアが作られた後に","ストアに追加できるようにすると、モジュールの予測できない名前空間が気になるかもしれません。あなたのモジュールは、プラグインユーザーが名前空間付きモジュールの元にモジュールを追加すると、その名前空間に属するようになります。この状況に適応するには、プラグインオプションを使用して名前空間の値を受け取る必要があります。","ディスパッチとコミットもこのモジュール用にローカライズされています","デフォルトでは、アクション、ミューテーション、そしてゲッター内部のモジュールはグローバル名前空間の元で登録されます","トップからボトムまでフラクタル構造です:","ネストされた","ネストされたモジュール","プラグインが、モジュールをアプリケーションのストアに付属させることで、状態の管理に","プラグインオプションで名前空間値を取得し、","プラグイン開発者向けの注意事項","プラグイン関数を返す","ヘルパーを使って名前空間付きモジュールをコンポーネントにバインディングするとき、少し冗長になります:","ミューテーション、アクション、ゲッター...","メソッドを使って、モジュールを登録できます:","モジュール","モジュールのアセット","モジュールのステートには","モジュールのミューテーションやゲッターの中では、渡される第1引数はモジュールのローカルステートです。","モジュールのローカルステート","モジュールの再利用","モジュールの状態を宣言するために単純なオブジェクトを使用すると、その状態オブジェクトは参照によって共有され、変更時にクロスストア/モジュールの状態汚染を引き起こします。(例:","モジュールをより自己完結型にまた再利用可能なものにしたい場合は、それを","モジュールを提供するプラグインを作成し、ユーザーがそれらを","モジュールを登録します","モジュールステートはすでにネストされており、名前空間のオプションによって影響を受けません","ライブラリは、動的に付属させたモジュール内部でアプリケーションのルーティングのステートを管理することで","ルートディスパッチ/コミットの","以降でサポートされます):","動的なモジュール登録があることで、他の","動的にモジュールを登録する","単一ステートツリーを使うため、アプリケーションの全ての状態は、一つの大きなストアオブジェクトに内包されます。しかしながら、アプリケーションが大きくなるにつれて、ストアオブジェクトは膨れ上がってきます。","同じストアに同じモジュールを複数回登録する","同じモジュールを使用する複数のストアを作成する;","同様に、モジュールのアクションの中では","名前空間","名前空間によるバインディングヘルパー","名前空間のゲッターとアクションは、ローカライズされた","名前空間をプラグインモジュールの型に追加する","名前空間付きモジュールでのグローバルアセットへのアクセス","時どき、モジュールの複数インスタンスを作成する必要があるかもしれません。例えば:","親モジュールから名前空間を継承する"],"structure.html":["#","...","actions.j","api","app.vu","cart","cart.j","compon","exampl","index.html","index.j","main.j","modul","mutations.j","product","products.j","shop","store","vuex","│","└──","├──","これらのルールに従っている限り、プロジェクトをどのように構造化するかはあなた次第です。もしストアファイルが大きくなり過ぎたら、単純にアクションやミューテーション、ゲッターをそれぞれ別のファイルに切り出すことができます。","それなりに手の込んだアプリケーションであれば、モジュールを活用する必要が出てきそうです。プロジェクトの構造の例は以下のようになります:","は実際のところ、あなたがコードを構造化する方法を制限しません。もっと正確に言うと、それより高いレベルの原理原則を適用させます:","をみてみるのもよいでしょう。","アクションのルートファイル","アプリケーションの構造","アプリケーションレベルの状態はストアに集約されます。","ミューテーションのルートファイル","モジュール","モジュールを集めてストアをエクスポートする","参考として","呼び出しを抽象化する","状態を変更する唯一の方法は、同期的に処理を行うミューテーションをコミットすることのみです。","非同期的なロジックはカプセル化されるべきであり、それはアクションによって構成されます。"],"plugins.html":["!==","\"ablacklistedmutation\"","'production'","'update_data')","'vuex/dist/logger'","(mutation)","(mutation,","(mutation.typ","(socket)","(state)","(これは不自然な例です。実際には、さらに複雑なタスクのために",")","...","//",":","=","===","=>","?","[]","[createlogger()]","[myplugin]","[mypluginwithsnapshot]","[plugin]","_.clonedeep(state)","_.clonedeep(store.state)","`console`","`mutation`","`nextstate`","`prevstate`","`{","api","browserifi","collapsed:","console,","const","createlogg","createlogger({","createplugin","createwebsocketplugin","createwebsocketplugin(socket)","data","data)","default","devtool","export","fals","false,","filter","function","import","logger","logger:","mutation.payload)","mutation.typ","mutations,","mutationtransform","myplugin","mypluginwithsnapshot","new","nextstat","payload","plugin","plugins:","prevstat","process.env.node_env","product","return","socket.emit('update',","socket.on('data',","state)","state,","state.subtre","stateafter)","statebefore,","store","store.commit('receive_data',","store.subscribe((mutation)","store.subscribe((mutation,","transform","type,","vue","vuex","vuex.store({","webpack","websocket","{","}","})","},","}`","、","が必要になります。","そして、このように利用することができます:","それぞれのミューテーションの後に呼ばれます","です","ではdefineplugin","ではenvifi","では、","と","には、一般的なデバッグに利用する用途の備え付けのロガープラグインがあります。","に置き換えるために、","の実装,","の形式でログ出力されます","の形式で提供されます","は","は、各ミューテーションへのフックを公開する","もし、あなたが","や","を","を使っている場合は、これは不要でしょう。","を使っていれば、ビルドツールにそれを処理させることができます:","を比較...","を返します","オプションを受け付けます。","ストア","ストアが初期化されたときに呼ばれます","タグで直接読み込むことができ、createvuexlogg","デフォルトは","データソースとストアを例にします","ビルトインロガープラグイン","プラグイン","プラグインは、単一の引数としてストアを受けつけるただの関数です:","プラグインは直接、状態を変更できません。これはコンポーネントに似ています。プラグインはコンポーネント同様に、ミューテーションのコミットによる変更のトリガーだけで状態を変更できます。","プラグイン内でのミューテーションのコミット","ミューテーションのコミットによるストアとデータソースの同期をプラグインで実現できます。","ミューテーションは","ミューテーションは、`{","ミューテーションを記録する必要がある場合は、`true`","ロガーファイルは、他にも","ロガープラグインは、状態のスナップショットを撮ることに注意しましょう。スナップショットを撮ることはコストがかかるため、開発中だけ利用してください。","ロギングの前に、状態を変換します","ログ出力されたミューテーションを自動で展開します","上のように記述すれば、プラグインはデフォルトで利用されることになります。本番環境(","任意の方法でそれをフォーマットできます","例えば、特定のサブツリーのみを返します","時々、状態の\"スナップショット\"を撮って、ミューテーション前後の状態を比較したくなることがあるでしょう。それを実現するために、状態オブジェクトのディープコピーを行う必要があります:","次のミューテーションのために状態を保存","状態のスナップショットを撮る","状態のスナップショットを撮るプラグインはアプリケーションの開発の間だけ使われるべきです。","関数がグローバルに公開されます。","関数は、追加でいくつかのオプションを受け取れます):","関数はいくつかのオプションを受け取ります:"],"strict.html":["!==","'production'","...","//","=","const","new","process.env.node_env","store","strict:","true","vs","vuex","vuex.store({","})","の状態がミューテーションハンドラの外部で変更されたら、エラーを投げるようになります。これで全ての状態変更がデバッギングツールで明示的に追跡できることが保証されます。","を作成するときに、ただ","を指定するだけです:","プラグインと同様に、ビルドツールに処理させることができます:","厳格モード","厳格モードでは","厳格(strict)モードを有効にするには","本番環境","本番環境で厳格モードを有効にしてデプロイしてはいけません!厳格モードでは不適切なミューテーションを検出するためにステートツリーに対して深い監視を実行します。パフォーマンスコストを回避するために本番環境では無効にしてください。","開発環境"],"forms.html":["\"vuex","()","(comput","(e)","(state,","(value)","...","...mapstate({","//","=","=>","chang","computed:","e.target.value)","input","messag","message)","message:","methods:","model","mutations:","obj","obj.messag","property)","return","set","state","state.obj.messag","this.$store.commit('updatemessage',","this.$store.state.obj.messag","updatemessag","v","value)","vuex","way\"","{","}","})","},","がストアからオブジェクトを返す算出プロパティ","それに対処するための","でユーザーが入力するとき、直接","と","と仮定すると、v","に属する状態の一部で","のいくつかの有用な機能が使えません。代わりに、セッターで双方向算出プロパティを使うアプローチがあります。","のミューテーションハンドラ内部で処理されていないため、エラーを投げます。","の値をバインディングし、input","は","は、","または","を使用するとき、vuex","を使用するのは少しトリッキーです:","を変更します。厳格モードでは、この変更は明示的に","イベントでアクションを呼び出すことです:","フォームの扱い","ミューテーションのハンドラは以下のようになります:","ローカルステートよりもかなり冗長で、v","厳格モードで","双方向算出プロパティ","確かに、上記の例は単純な"],"testing.html":["'../api/shop'","'../api/shop':","'./getters'","'./store'","'./test.js',","'apple',","'babel","'carrot',","'chai'","'fruit'","'mocha","'orange',","'receive_products',","'request_products'","'test","'vegetable'","()","(action,","(cb)","(count","(error)","(expectedmutations.length","(payload)","(state,","(type,","({","*/","+","...","/*","//","/\\.js$/,","/node_modules/","0","0)","1,","100)","2,","3,","=","===","=>",">=","[","]","])","],","__dirname,","action","action({","actions.j","actions.spec.j","actionsinjector","actionsinjector({","api","bundl","bundle.j","bundle.js'","catch","category:","cb([","chai","commit","commit('receive_products',","commit('request_products')","commit,","const","count","count++","count:","default","describe('actions',","describe('getters',","describe('mutations',","dev","done","done()","done(error)","done)","entri","entry:","es2015","exclude:","expect","expect(count).to.equal(0)","expect(mutation.payload).to.deep.equal(payload)","expect(mutation.type).to.equal(type)","expect(result).to.deep.equal([","expect(state.count).to.equal(1)","expectedmutations,","expectedmutations.length)","expectedmutations[count]","export","filename:","filtercategori","filteredproduct","getallproduct","getproduct","getter","getters.filteredproducts(state,","getters.j","getters.spec.j","id:","import","increment","increment(state)","increment:","inject","inlin","it('filteredproducts',","it('getallproducts',","it('increment',","karma","loader","loader!./actions')","loader!./test.js'","loader!babel","loader',","loader:","loaders:","localhost:8080/webpack","mocha","module.export","module:","mutat","mutations.j","mutations.spec.j","new","node","null,","output:","path:","payload)","payload,","payload:","product.categori","products)","products:","requir","require('inject","result","return","server","server/test","settimeout(()","shop","shop.getproducts(product","state","state,","state.count++","state.products.filter(product","store.j","test","test:","testact","testaction(actions.getallproducts,","title:","tri","type:","vue","vuex","vuex.store({","webpack","webpack.config.j","{","{},","}","})","},","ここでは","それから下記コマンドを実行します:","での実行","でテストをバンドルでき、それを直接","でユニットテストしたい主な部分はミューテーションとアクションです。","で実行できます。別の方法として、本当のブラウザでテストを実行するためには","と","に変更する","に直接依存関係を持つことはないでしょう。したがって、単純に","のために","のモジュールを使っていて","の設定を作成します(.babelrc","または","もあわせて使います):","もしゲッターが複雑な計算を行っているならば、テストコードを書く価値があります。ゲッターはミューテーションと同様の理由でテストしやすいです。","を","をインストールする","を使ったブラウザでの実行","を使って、モック化された依存関係を注入できるようにするモジュールファクトリーを返す","を使ってテストファイルをバンドルすることができます。","を使用してミューテーションをテストする例です(あなたの好きな任意のフレームワーク/アサーションライブラリを使用できます):","を使用できます。","を呼び出す可能性があるため、ミューテーションのテストよりも少し注意が必要です。アクションをテストするとき、通常、いくつかの段階でモックを作る必要があります。例えば","を開く","を開始する","アクションのテスト","アクションは外部の","ゲッターから結果を受け取る","ゲッターのテスト","ゲッターのテストの例:","ゲッターをモックする","コミットをモックする","ステートのモック","ステートをモックする","テスト","テストの実行","ドキュメント","ファイルの中にミューテーションがあるなら、デフォルトエクスポートに加えて、名前付きエクスポートでミューテーションをエクスポートできます。","ブラウザで","ブラウザでの実行","ミューテーションのテスト","ミューテーションの分割束縛","ミューテーションは完全に引数に依存しているだけの関数であるため、テストするのがとても簡単です。効果的なやり方として、もし","ミューテーションやアクションが適切に書かれている場合は、適切にモック化された後、テストコードはブラウザの","ミューテーションを適用する","モックによってモジュールを作成する","モック化したストアと引数でアクションを呼び出す","レスポンスのモック","上記","以下のような","内のセットアップ方法を参考にしてください。","名前付きエクスポートでミューテーションをエクスポートする","呼び出されるべきミューテーションが残っていないか確認する","呼び出しをサービスとして抽象化し、そしてテストの内部ではそのサービスをモックにすることができます。簡単に依存関係をモック化するために、webpack","期待されるミューテーションをアクションが呼び出すかをテストするためのヘルパー","構文を使用する","私たちが","結果を検証する","設定から","設定を使用して","非同期なアクションのテストの例:"],"hot-reload.html":["'./modules/a'","'./modules/a'],","'./mutations'","'vue'","'vuex'","()","(module.hot)","...",".default","//","6","=","=>","a:","api","babel","browserifi","const","exampleをチェックアウトしてください。","hmr","hot","import","modul","module.hot.accept(['./mutations',","modulea","modules:","mutat","mutations,","mutations:","new","newact","newmodulea","newmut","newmutations,","replac","require('./actions').default","require('./mutations').default","state","state,","store","store.hotupdate({","store.j","vue","vue.use(vuex)","vuex","vuex.store({","webpack","{","}","})","では","の","のモジュール出力のため、ここでは","は","を使用することで、アプリケーションの開発を行っている間のミューテーション、モジュール、アクション、ゲッターのホットリローディングをサポートします。browserifi","を追加しなければならない","プラグインを使用することができます。","ホットモジュールとしてアクションとモジュールを受け付けます","ホットリローディング","ホットリローディングを試したい場合は、counter","ミューテーションとモジュールのホットリローディングのために、store.hotupdate()","メソッドを利用する必要があります:","新しいアクションとミューテーションにスワップ","更新されたモジュールをインポートする"],"api.html":["'vuex'","...","...option","//","2.5.0","=","=>","[key:","[type:","`store.commit`","`store.dispatch`","`store.getters`","`store.state`","action","actions?,","any,","api","array","array)","array,","boolean","cb:","commit(mutation:","commit(type:","commit,","comput","console.log(action.payload)","console.log(action.type)","console.log(mutation.payload)","console.log(mutation.type)","const","context","context.st","createnamespacedhelpers(namespace:","dispatch(action:","dispatch(type:","dispatch,","fals","function","function)","function,","getter","getters,","getters?,","hotupdate(newoptions:","import","key:","map:","mapactions(namespace?:","mapgetters(namespace?:","mapmut","mapmutations(namespace?:","mapstate(namespace?:","mapstate、mapgetters、mapact","method","modul","module,","module:","modules?","mutat","new","object","object)","object):","object,","observ","option","options?:","payload","payload?:","plugin","preservestate:","registermodule(path:","replacestate(state:","root","root:","rootgett","rootstate,","state","state)","state,","store","store.gett","store.subscribe((mutation,","store.subscribeaction((action,","strict","string","string):","string,","string]:","subscribe(handler:","subscribeaction(handler:","true","type:","unregistermodule(path:","vue","vuex","vuex.stor","vuex.store({","watch(getter:","websocket","{","|","}","})","},","が含まれます。詳細はこちら","すべてのトリガーされたアクションハンドラを解決するpromiseを返します。詳細","そして","で新規追加","と","と同じ","と同じ。ただしモジュール内に限る","と同じか、モジュール内にあればローカルゲッター","と同じか、モジュール内にあればローカルステート","なアクションにディスパッチできる","なミューテーションにコミットできる","のvm.$watchメソッドと同じオプションをオプションのオブジェクトとして受け付けます。","のような外から渡されるデータのためにミューテーションをディスパッチします。","の状態の変更を行うと、エラーが投げられます。","は、全てのミューテーションの後に呼ばれ、引数として、ミューテーション","はディスパッチされたアクションごとに呼び出され、アクション記述子と現在のストア状態を引数として受け取ります:","は前の状態を保存する","は名前空間付きモジュールで","もローカルステートを指すようになります。","や","を2番目の引数として受け取ります。","を受け取ります。","を含むことができます。モジュールの状態は、モジュールのキーを使って、ストアのルートステートに結合されます。モジュールのミューテーションとゲッターは、第一引数としてルートステートの代わりに、モジュールのローカルステートだけを受け取り、モジュールのアクションの","を常に受け取り(モジュール内で定義されていれば、モジュールのローカルステートを受け取り)、指定されていれば第二引数に","を持つことができます。サーバサイドレンダリングに役立ちます。","を持つことできます。","を持つことできます。詳細","を最初の引数として、","アクションをディスパッチします。option","アクションをディスパッチするコンポーネントの","インスタンスプロパティ","インスタンスメソッド","オブジェクトを受け取ります。:","オブジェクトを返す関数を渡す場合、返されたオブジェクトはルートステートとして使用されます。これは特にモジュールの再利用のためにステートオブジェクトを再利用する場合に便利です。詳細","オプションを作成します。詳細","グローバルステート","ゲッターの評価後の値を返すコンポーネントの","ゲッター関数は次の引数を受け取ります:","コンストラクタオプション","コンポーネントをバインドするヘルパー","サブモジュールを含む次のような形式のオブジェクトはストアにマージされます。","ストアにアクションを登録します。ハンドラ関数は次のプロパティを持つ","ストアにゲッターを登録します.","ストアにミューテーションを登録します。ハンドラ関数は第一引数に","ストアのための","ストアのサブツリーを返すコンポーネントの","ストアのルートステートを置き換えます。これは、ステートのハイドレーションやタイムトラベルのためだけに利用すべきです。","ストアへのミューテーションを購読します。handler","ストアを厳格モードにします。厳格モードでは、ミューテーションハンドラ以外で、","ストアアクションを購読します。handler","ディスクリプタとミューテーション後の状態を受け取ります。","デフォルト:","プラグインで最も一般的に使用されます。detail","プラグインの中でもっともよく利用されます。詳細","プラグイン関数の配列は、ストアに適用されます。このプラグインは、ストアだけを引数として受け取り、外部への永続化、ロギング、デバッギングのために、ミューテーションを監視するか、または、","ミューテーションをコミットします。option","ミューテーションをコミットするコンポーネントの","モジュールで定義されたときの仕様","モジュールで定義された場合、モジュールのローカルステート","モジュール内で定義されていればモジュールのローカルステート","リアクティブにゲッター関数の返す値を監視します。値が変わった場合は、コールバックを呼びます。ゲッターはストアの","リファレンス","ルートステート、読み取り専用です。","ルートステートオブジェクトです。詳細","上に公開されます。","全てのゲッター","動的なモジュールを登録します。詳細","動的なモジュールを解除します。詳細","各モジュールは、ルートオプションに似た","名前空間付けられたコンポーネントバインディングのヘルパーを作成します。返されるオブジェクトは指定された名前空間にバインドされた","型:","新しいアクションとミューテーションをホットスワップします。詳細","現在のモジュールのモジュールのローカルゲッター","登録されたゲッターは","登録されているゲッターを公開します。読み取り専用です。","監視を止める場合は、ハンドラ関数の返り値を関数として呼び出します。","第1引数は、オプションで名前空間文字列にすることができます。詳細","詳細"]},"length":17},"tokenStore":{"root":{"0":{"docs":{"intro.html":{"ref":"intro.html","tf":0.01020408163265306},"getting-started.html":{"ref":"getting-started.html","tf":0.015873015873015872},"actions.html":{"ref":"actions.html","tf":0.0034482758620689655},"modules.html":{"ref":"modules.html","tf":0.001694915254237288},"testing.html":{"ref":"testing.html","tf":0.0041841004184100415}},")":{"docs":{"testing.html":{"ref":"testing.html","tf":0.0020920502092050207}}}},"1":{"0":{"0":{"0":{"docs":{},")":{"docs":{"actions.html":{"ref":"actions.html","tf":0.006896551724137931}}}},"docs":{},")":{"docs":{"testing.html":{"ref":"testing.html","tf":0.0020920502092050207}}}},"docs":{"mutations.html":{"ref":"mutations.html","tf":0.007142857142857143},"actions.html":{"ref":"actions.html","tf":0.006896551724137931}},")":{"docs":{"mutations.html":{"ref":"mutations.html","tf":0.0035714285714285713}}}},"2":{"3":{"docs":{"mutations.html":{"ref":"mutations.html","tf":0.0035714285714285713}},")":{"docs":{"mutations.html":{"ref":"mutations.html","tf":0.0035714285714285713}},",":{"docs":{"mutations.html":{"ref":"mutations.html","tf":0.0015015015015015015}}}}},"docs":{}},"docs":{"getting-started.html":{"ref":"getting-started.html","tf":0.015873015873015872},"getters.html":{"ref":"getters.html","tf":0.005813953488372093},"mutations.html":{"ref":"mutations.html","tf":0.010714285714285714}},",":{"docs":{"getters.html":{"ref":"getters.html","tf":0.011627906976744186},"testing.html":{"ref":"testing.html","tf":0.0041841004184100415}}},"s":{"docs":{},"t":{"docs":{"getters.html":{"ref":"getters.html","tf":0.00392156862745098}}}},")":{"docs":{"modules.html":{"ref":"modules.html","tf":0.001694915254237288}}}},"2":{"docs":{"modules.html":{"ref":"modules.html","tf":0.003389830508474576}},",":{"docs":{"getters.html":{"ref":"getters.html","tf":0.011627906976744186},"testing.html":{"ref":"testing.html","tf":0.0041841004184100415}}},"n":{"docs":{},"d":{"docs":{"getters.html":{"ref":"getters.html","tf":0.00392156862745098}}}},".":{"3":{"docs":{},".":{"0":{"docs":{},"+":{"docs":{"modules.html":{"ref":"modules.html","tf":0.0015037593984962407}},")":{"docs":{"modules.html":{"ref":"modules.html","tf":0.0007342143906020558}},":":{"docs":{"modules.html":{"ref":"modules.html","tf":0.0008305647840531562}}}}}},"docs":{}}},"5":{"docs":{},".":{"0":{"docs":{"api.html":{"ref":"api.html","tf":0.0031645569620253164}},"+":{"docs":{"api.html":{"ref":"api.html","tf":0.0010121457489878543}}}},"docs":{}}},"docs":{}},")":{"docs":{},",":{"docs":{"mutations.html":{"ref":"mutations.html","tf":0.0011325028312570782}}}},"つ":{"docs":{},"あ":{"docs":{},"り":{"docs":{},"ま":{"docs":{},"す":{"docs":{},"。":{"docs":{"getting-started.html":{"ref":"getting-started.html","tf":0.015873015873015872}}}}}}},"の":{"docs":{},"メ":{"docs":{},"ソ":{"docs":{},"ッ":{"docs":{},"ド":{"docs":{},"を":{"docs":{},"両":{"docs":{},"方":{"docs":{},"呼":{"docs":{},"び":{"docs":{},"出":{"docs":{},"す":{"docs":{},"と":{"docs":{},"き":{"docs":{},"、":{"docs":{},"そ":{"docs":{},"れ":{"docs":{},"ら":{"docs":{},"が":{"docs":{},"い":{"docs":{},"つ":{"docs":{},"呼":{"docs":{},"び":{"docs":{},"出":{"docs":{},"さ":{"docs":{},"れ":{"docs":{},"た":{"docs":{},"か":{"docs":{},"、":{"docs":{},"ど":{"docs":{},"ち":{"docs":{},"ら":{"docs":{},"が":{"docs":{},"先":{"docs":{},"に":{"docs":{},"呼":{"docs":{},"び":{"docs":{},"出":{"docs":{},"さ":{"docs":{},"れ":{"docs":{},"た":{"docs":{},"か":{"docs":{},"を":{"docs":{},"、":{"docs":{},"ど":{"docs":{},"う":{"docs":{},"や":{"docs":{},"っ":{"docs":{},"て":{"docs":{},"知":{"docs":{},"れ":{"docs":{},"ば":{"docs":{},"よ":{"docs":{},"い":{"docs":{},"の":{"docs":{},"で":{"docs":{},"し":{"docs":{},"ょ":{"docs":{},"う":{"docs":{},"?":{"docs":{},"こ":{"docs":{},"れ":{"docs":{},"が":{"docs":{},"ま":{"docs":{},"さ":{"docs":{},"に":{"docs":{},"、":{"docs":{},"状":{"docs":{},"態":{"docs":{},"変":{"docs":{},"更":{"docs":{},"と":{"docs":{},"非":{"docs":{},"同":{"docs":{},"期":{"docs":{},"の":{"docs":{"mutations.html":{"ref":"mutations.html","tf":0.0035714285714285713}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"概":{"docs":{},"念":{"docs":{},"を":{"docs":{},"分":{"docs":{},"離":{"docs":{},"し":{"docs":{},"た":{"docs":{},"い":{"docs":{},"と":{"docs":{},"い":{"docs":{},"う":{"docs":{},"理":{"docs":{},"由":{"docs":{},"で":{"docs":{},"す":{"docs":{},"。":{"docs":{},"v":{"docs":{},"u":{"docs":{},"e":{"docs":{},"x":{"docs":{"mutations.html":{"ref":"mutations.html","tf":0.0035714285714285713}}}}}}}}}}}}}}}}}}}}}}}}},"3":{"docs":{"state.html":{"ref":"state.html","tf":0.005050505050505051},"mutations.html":{"ref":"mutations.html","tf":0.0035714285714285713},"modules.html":{"ref":"modules.html","tf":0.0024916943521594683}},"r":{"docs":{},"d":{"docs":{"modules.html":{"ref":"modules.html","tf":0.003205128205128205}}}},",":{"docs":{"testing.html":{"ref":"testing.html","tf":0.0020920502092050207},"mutations.html":{"ref":"mutations.html","tf":0.0015015015015015015}}},".":{"0":{"docs":{"./":{"ref":"./","tf":0.024390243902439025}}},"docs":{}},"ᵉ":{"docs":{"modules.html":{"ref":"modules.html","tf":0.0014684287812041115}}}},"4":{"docs":{"modules.html":{"ref":"modules.html","tf":0.0016611295681063123}},"t":{"docs":{},"h":{"docs":{"modules.html":{"ref":"modules.html","tf":0.002136752136752137}}}},"ᵉ":{"docs":{"modules.html":{"ref":"modules.html","tf":0.0014684287812041115}}}},"6":{"docs":{"hot-reload.html":{"ref":"hot-reload.html","tf":0.010869565217391304}},")":{"docs":{"hot-reload.html":{"ref":"hot-reload.html","tf":0.007042253521126761}}}},"docs":{},"a":{"docs":{},"c":{"docs":{},"t":{"docs":{},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{"./":{"ref":"./","tf":0.020833333333333332},"intro.html":{"ref":"intro.html","tf":0.01020408163265306},"core-concepts.html":{"ref":"core-concepts.html","tf":0.02702702702702703},"mutations.html":{"ref":"mutations.html","tf":0.0011325028312570782},"actions.html":{"ref":"actions.html","tf":10.027181688125895},"modules.html":{"ref":"modules.html","tf":0.004405286343612335},"structure.html":{"ref":"structure.html","tf":0.005154639175257732},"forms.html":{"ref":"forms.html","tf":0.004807692307692308},"testing.html":{"ref":"testing.html","tf":0.0020920502092050207},"hot-reload.html":{"ref":"hot-reload.html","tf":0.017964071856287425},"api.html":{"ref":"api.html","tf":0.0031645569620253164},"state.html":{"ref":"state.html","tf":0.00141643059490085}},"s":{"docs":{},",":{"docs":{"intro.html":{"ref":"intro.html","tf":0.003215434083601286},"modules.html":{"ref":"modules.html","tf":0.0022026431718061676},"structure.html":{"ref":"structure.html","tf":0.005154639175257732},"testing.html":{"ref":"testing.html","tf":0.0012285012285012285}}},".":{"docs":{"mutations.html":{"ref":"mutations.html","tf":0.0011325028312570782},"structure.html":{"ref":"structure.html","tf":0.005154639175257732},"testing.html":{"ref":"testing.html","tf":0.0012285012285012285},"api.html":{"ref":"api.html","tf":0.0016129032258064516}},"j":{"docs":{"structure.html":{"ref":"structure.html","tf":0.01694915254237288},"testing.html":{"ref":"testing.html","tf":0.0020920502092050207}}},"s":{"docs":{},"p":{"docs":{},"e":{"docs":{},"c":{"docs":{},".":{"docs":{},"j":{"docs":{"testing.html":{"ref":"testing.html","tf":0.0020920502092050207}}}}}}}}},":":{"docs":{"actions.html":{"ref":"actions.html","tf":0.02413793103448276},"modules.html":{"ref":"modules.html","tf":0.00847457627118644}}},"i":{"docs":{},"n":{"docs":{},"j":{"docs":{},"e":{"docs":{},"c":{"docs":{},"t":{"docs":{},"o":{"docs":{},"r":{"docs":{"testing.html":{"ref":"testing.html","tf":0.0020920502092050207}},"(":{"docs":{},"{":{"docs":{"testing.html":{"ref":"testing.html","tf":0.0020920502092050207}}}}}}}}}}}},"'":{"docs":{"api.html":{"ref":"api.html","tf":0.0016129032258064516}}},"?":{"docs":{},",":{"docs":{"api.html":{"ref":"api.html","tf":0.0031645569620253164}}}},",":{"docs":{},"响":{"docs":{},"应":{"docs":{},"在":{"docs":{"intro.html":{"ref":"intro.html","tf":0.010309278350515464}}}}}}},":":{"docs":{"actions.html":{"ref":"actions.html","tf":0.006564551422319475},"testing.html":{"ref":"testing.html","tf":0.0016366612111292963},"forms.html":{"ref":"forms.html","tf":0.010309278350515464}}},"a":{"docs":{"actions.html":{"ref":"actions.html","tf":0.006896551724137931}}},"b":{"docs":{"actions.html":{"ref":"actions.html","tf":0.006896551724137931}}},"(":{"docs":{},"{":{"docs":{"testing.html":{"ref":"testing.html","tf":0.0020920502092050207}}}},".":{"docs":{"api.html":{"ref":"api.html","tf":0.0020242914979757085}}},"。":{"docs":{"mutations.html":{"ref":"mutations.html","tf":0.003076923076923077},"modules.html":{"ref":"modules.html","tf":0.0015037593984962407}},"h":{"docs":{},"a":{"docs":{},"n":{"docs":{},"d":{"docs":{},"l":{"docs":{"api.html":{"ref":"api.html","tf":0.0025252525252525255}}}}}}},"o":{"docs":{},"p":{"docs":{},"t":{"docs":{"api.html":{"ref":"api.html","tf":0.0025252525252525255}}}}},"处":{"docs":{},"理":{"docs":{},"函":{"docs":{},"数":{"docs":{},"总":{"docs":{},"是":{"docs":{},"接":{"docs":{},"受":{"docs":{"api.html":{"ref":"api.html","tf":0.0025252525252525255}}}}}}}}}},"详":{"docs":{},"细":{"docs":{},"介":{"docs":{},"绍":{"docs":{"api.html":{"ref":"api.html","tf":0.0025252525252525255}}}}}},"返":{"docs":{},"回":{"docs":{},"一":{"docs":{},"个":{"docs":{},"解":{"docs":{},"析":{"docs":{},"所":{"docs":{},"有":{"docs":{},"被":{"docs":{},"触":{"docs":{},"发":{"docs":{},"的":{"docs":{"api.html":{"ref":"api.html","tf":0.0025252525252525255}}}}}}}}}}}}}}},",":{"docs":{},"以":{"docs":{},"处":{"docs":{},"理":{"docs":{},"更":{"docs":{},"加":{"docs":{},"复":{"docs":{},"杂":{"docs":{},"的":{"docs":{},"异":{"docs":{},"步":{"docs":{},"流":{"docs":{},"程":{"docs":{},"?":{"docs":{"actions.html":{"ref":"actions.html","tf":0.002932551319648094}}}}}}}}}}}}}}},"或":{"docs":{},"者":{"docs":{},"使":{"docs":{},"用":{"docs":{"actions.html":{"ref":"actions.html","tf":0.002932551319648094}}}}}},"局":{"docs":{},"部":{"docs":{},"状":{"docs":{},"态":{"docs":{},"通":{"docs":{},"过":{"docs":{"modules.html":{"ref":"modules.html","tf":0.0015037593984962407}}}}}}}}},":":{"docs":{"actions.html":{"ref":"actions.html","tf":0.005865102639296188}}},"、":{"docs":{},"m":{"docs":{},"u":{"docs":{},"t":{"docs":{"modules.html":{"ref":"modules.html","tf":0.0015037593984962407},"structure.html":{"ref":"structure.html","tf":0.014285714285714285}}}}}}}},"v":{"docs":{"strict.html":{"ref":"strict.html","tf":0.007352941176470588}}}},"u":{"docs":{},"a":{"docs":{},"l":{"docs":{"mutations.html":{"ref":"mutations.html","tf":0.0058823529411764705},"modules.html":{"ref":"modules.html","tf":0.0010683760683760685}}}},"e":{"docs":{},"l":{"docs":{"state.html":{"ref":"state.html","tf":0.00141643059490085},"actions.html":{"ref":"actions.html","tf":0.001430615164520744}}}}},"o":{"docs":{},"n":{"docs":{"getting-started.html":{"ref":"getting-started.html","tf":0.0026666666666666666}}}},"e":{"docs":{},"r":{"docs":{"mutations.html":{"ref":"mutations.html","tf":0.0056625141562853904},"actions.html":{"ref":"actions.html","tf":0.001430615164520744},"plugins.html":{"ref":"plugins.html","tf":0.001834862385321101},"testing.html":{"ref":"testing.html","tf":0.0012285012285012285},"api.html":{"ref":"api.html","tf":0.0010121457489878543}},",":{"docs":{"mutations.html":{"ref":"mutations.html","tf":0.0011325028312570782}}}},"n":{"docs":{},"t":{"docs":{"actions.html":{"ref":"actions.html","tf":0.001430615164520744},"api.html":{"ref":"api.html","tf":0.0010121457489878543}}}}},"é":{"docs":{"modules.html":{"ref":"modules.html","tf":0.0007342143906020558}},"e":{"docs":{},",":{"docs":{"mutations.html":{"ref":"mutations.html","tf":0.0011325028312570782}}}}},"a":{"docs":{},"n":{"docs":{},"t":{"docs":{"plugins.html":{"ref":"plugins.html","tf":0.003669724770642202}},".":{"docs":{"actions.html":{"ref":"actions.html","tf":0.001430615164520744}}}}}}},"c":{"docs":{},"e":{"docs":{},"s":{"docs":{},"s":{"docs":{"intro.html":{"ref":"intro.html","tf":0.0031446540880503146},"getting-started.html":{"ref":"getting-started.html","tf":0.004878048780487805},"state.html":{"ref":"state.html","tf":0.0023584905660377358},"actions.html":{"ref":"actions.html","tf":0.002188183807439825},"modules.html":{"ref":"modules.html","tf":0.0010683760683760685}},"e":{"docs":{},"u":{"docs":{},"r":{"docs":{"./":{"ref":"./","tf":0.020833333333333332},"core-concepts.html":{"ref":"core-concepts.html","tf":0.02702702702702703},"state.html":{"ref":"state.html","tf":0.00141643059490085},"getters.html":{"ref":"getters.html","tf":10.027322404371585},"actions.html":{"ref":"actions.html","tf":0.001430615164520744},"modules.html":{"ref":"modules.html","tf":0.005139500734214391},"structure.html":{"ref":"structure.html","tf":0.005154639175257732},"testing.html":{"ref":"testing.html","tf":0.006142506142506142},"hot-reload.html":{"ref":"hot-reload.html","tf":0.005988023952095809},"api.html":{"ref":"api.html","tf":0.008097165991902834}},"s":{"docs":{},",":{"docs":{"modules.html":{"ref":"modules.html","tf":0.0007342143906020558}}},".":{"docs":{"modules.html":{"ref":"modules.html","tf":0.0007342143906020558}},".":{"docs":{},".":{"docs":{"modules.html":{"ref":"modules.html","tf":0.0007342143906020558}}}}}},",":{"docs":{"api.html":{"ref":"api.html","tf":0.0010121457489878543}}},".":{"docs":{"api.html":{"ref":"api.html","tf":0.0010121457489878543}}}}}}}},"p":{"docs":{},"t":{"docs":{"actions.html":{"ref":"actions.html","tf":0.002188183807439825},"modules.html":{"ref":"modules.html","tf":0.0007342143906020558},"plugins.html":{"ref":"plugins.html","tf":0.0026954177897574125},"hot-reload.html":{"ref":"hot-reload.html","tf":0.005988023952095809},"api.html":{"ref":"api.html","tf":0.0010121457489878543}}}}},"o":{"docs":{},"u":{"docs":{},"n":{"docs":{},"t":{"docs":{},":":{"docs":{"modules.html":{"ref":"modules.html","tf":0.001694915254237288}}}}}}},"é":{"docs":{},"d":{"docs":{},"e":{"docs":{},"r":{"docs":{"intro.html":{"ref":"intro.html","tf":0.001607717041800643},"getting-started.html":{"ref":"getting-started.html","tf":0.0026666666666666666},"state.html":{"ref":"state.html","tf":0.00141643059490085},"actions.html":{"ref":"actions.html","tf":0.001430615164520744},"modules.html":{"ref":"modules.html","tf":0.0007342143906020558}}}}}}},"h":{"docs":{},"i":{"docs":{},"e":{"docs":{},"v":{"docs":{"modules.html":{"ref":"modules.html","tf":0.0010683760683760685},"plugins.html":{"ref":"plugins.html","tf":0.0026954177897574125}}}}}}},"p":{"docs":{},"i":{"docs":{"./":{"ref":"./","tf":0.037037037037037035},"actions.html":{"ref":"actions.html","tf":0.006896551724137931},"structure.html":{"ref":"structure.html","tf":0.03389830508474576},"testing.html":{"ref":"testing.html","tf":0.006276150627615063},"hot-reload.html":{"ref":"hot-reload.html","tf":0.021739130434782608},"api.html":{"ref":"api.html","tf":5.003164556962025},"plugins.html":{"ref":"plugins.html","tf":0.004048582995951417}},".":{"docs":{"hot-reload.html":{"ref":"hot-reload.html","tf":0.007042253521126761},"testing.html":{"ref":"testing.html","tf":0.001388888888888889}},"c":{"docs":{},"a":{"docs":{},"l":{"docs":{},"l":{"docs":{},"a":{"docs":{},"s":{"docs":{},"y":{"docs":{},"n":{"docs":{},"c":{"docs":{},"m":{"docs":{},"e":{"docs":{},"t":{"docs":{},"h":{"docs":{},"o":{"docs":{},"d":{"docs":{},"(":{"docs":{},"(":{"docs":{},")":{"docs":{"mutations.html":{"ref":"mutations.html","tf":0.0035714285714285713}}}}}}}}}}}}}}}}}}}}},",":{"docs":{"plugins.html":{"ref":"plugins.html","tf":0.0026954177897574125}}},"s":{"docs":{},".":{"docs":{"testing.html":{"ref":"testing.html","tf":0.0016366612111292963}}}},"。":{"docs":{},"当":{"docs":{},"测":{"docs":{},"试":{"docs":{"testing.html":{"ref":"testing.html","tf":0.00186219739292365}}}}}},",":{"docs":{},"因":{"docs":{},"此":{"docs":{},"你":{"docs":{},"可":{"docs":{},"以":{"docs":{},"直":{"docs":{},"接":{"docs":{},"用":{"docs":{"testing.html":{"ref":"testing.html","tf":0.00186219739292365}}}}}}}}}},"v":{"docs":{},"u":{"docs":{},"e":{"docs":{},"x":{"docs":{"hot-reload.html":{"ref":"hot-reload.html","tf":0.009900990099009901}}}}}}}},"p":{"docs":{"intro.html":{"ref":"intro.html","tf":0.006289308176100629},"getting-started.html":{"ref":"getting-started.html","tf":0.004878048780487805},"state.html":{"ref":"state.html","tf":0.005050505050505051},"mutations.html":{"ref":"mutations.html","tf":0.006153846153846154}},"l":{"docs":{},"i":{"docs":{"testing.html":{"ref":"testing.html","tf":0.0016366612111292963},"api.html":{"ref":"api.html","tf":0.0016129032258064516}},"c":{"docs":{"./":{"ref":"./","tf":0.020833333333333332},"getting-started.html":{"ref":"getting-started.html","tf":0.0026666666666666666},"state.html":{"ref":"state.html","tf":0.0023584905660377358},"modules.html":{"ref":"modules.html","tf":0.0014684287812041115},"structure.html":{"ref":"structure.html","tf":3.3436426116838485},"intro.html":{"ref":"intro.html","tf":0.00964630225080386}},"a":{"docs":{},"t":{"docs":{},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{},",":{"docs":{"intro.html":{"ref":"intro.html","tf":0.003215434083601286}}},"s":{"docs":{},".":{"docs":{"intro.html":{"ref":"intro.html","tf":0.0031446540880503146},"getting-started.html":{"ref":"getting-started.html","tf":0.0026666666666666666}}}},".":{"docs":{"state.html":{"ref":"state.html","tf":0.0028328611898017},"getting-started.html":{"ref":"getting-started.html","tf":0.0026666666666666666}}},":":{"docs":{"mutations.html":{"ref":"mutations.html","tf":0.00196078431372549}}},"'":{"docs":{"modules.html":{"ref":"modules.html","tf":0.002136752136752137}}}}},"f":{"docs":{"state.html":{"ref":"state.html","tf":0.00141643059490085}}}}}}},"q":{"docs":{},"u":{"docs":{"intro.html":{"ref":"intro.html","tf":0.001607717041800643},"testing.html":{"ref":"testing.html","tf":0.0012285012285012285}},"é":{"docs":{"api.html":{"ref":"api.html","tf":0.0010121457489878543}}}}}}},":":{"docs":{"intro.html":{"ref":"intro.html","tf":0.0031446540880503146}}},";":{"docs":{"intro.html":{"ref":"intro.html","tf":0.0031446540880503146}}},".":{"docs":{"getting-started.html":{"ref":"getting-started.html","tf":0.004878048780487805},"state.html":{"ref":"state.html","tf":0.0023584905660377358},"modules.html":{"ref":"modules.html","