New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Update ja document #240
Merged
Merged
Update ja document #240
Changes from 1 commit
Commits
Show all changes
38 commits
Select commit
Hold shift + click to select a range
1ff893d
start commit for updating jp doc
kitak 804a00d
update ja doc summary
kitak 2b1f36d
update ja intro document
kitak 2c59ccf
add getters text
kitak 962ba6b
remove duplication
kitak 2823b51
add tutorial section for ja doc
ktsn 44559e8
improvement
ee567f4
create getting-started ja document
976d647
improvement
6ac675f
update ja state document
kitak 02aed3d
fix some
kitak 01418a6
fix some
kitak b3e193f
add actions.md for ja doc
ktsn d52b980
update data-flow document for ja
ktsn 3bdd390
bolden a word in ja/actions.md to consistent with en doc
ktsn 358b1a8
update ja mutations document
kitak 32b4547
fix
kitak 2d23def
update ja structure document until simple structure
kitak 1590e3a
update ja structure document
kitak 4ed854a
fix some
kitak 22af137
update ja plugin document
kitak b4b56af
update forms.md for ja docs
ktsn 0f1331f
fix typo
kitak 7df1f50
update ja strict document
kitak 95753b8
update hot-reload ja document
kitak 2404dd5
update testing.md for ja doc
ktsn db25191
update ja api document
kitak c2775d9
improvement
kitak 8350c41
improvement
kitak 1410b70
improvement
kitak 77e103d
update version of language index
kitak bc4d9e8
remove unreferenced ja documents
ktsn 4093089
fix textlint issues for ja docs
ktsn eab0f57
fix typos
ktsn 8ac01e2
fix indentation for layout
ktsn 3ff1a80
update ja docs for 1.0-rc.2
kitak b021663
fix typo
kitak 568bafd
improvement
kitak File filter
Filter by extension
Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,6 +1,6 @@ | ||
# ミューテーション | ||
|
||
Vuex のミューテーションは基本的にイベントです。各ミューテーションは**名前**と**ハンドラ**を持ちます。ハンドラ関数は常に全体のステートツリーを第1引数として取得します: | ||
Vuex のミューテーションは本質的にイベントです。各ミューテーションは**名前**と**ハンドラ**を持ちます。ハンドラ関数は常に Vuex のstateを第1引数として取得します: | ||
|
||
``` js | ||
import Vuex from 'vuex' | ||
|
@@ -11,24 +11,24 @@ const store = new Vuex.Store({ | |
}, | ||
mutations: { | ||
INCREMENT (state) { | ||
// 変異するステート | ||
// 状態の変更 | ||
state.count++ | ||
} | ||
} | ||
}) | ||
``` | ||
|
||
ミューテーション名に対して全て大文字を使用するのは、容易にアクションと区別できるようにするための規則です。 | ||
ミューテーションの名前に全て大文字を使用するのは、容易に通常の関数と区別できるようにするための規約です。 | ||
|
||
直接ミューテーションハンドラ呼び出すことはできません。ここでのオプションは、よりイベント登録のようなものです。"`INCREMENT` イベントがディスパッチされるとき、このハンドラは呼ばれます。"ミューテーションハンドラを起動するためには、ミューテーションイベントをディスパッチする必要があります: | ||
直接ミューテーションハンドラを呼び出すことはできません。このmutationsオプションは、よりイベント登録のようなものです: "`INCREMENT` イベントがディスパッチされるとき、このハンドラが呼ばれる" ミューテーションハンドラを起動するためには、ミューテーションイベントをディスパッチする必要があります: | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. ここの |
||
|
||
``` js | ||
store.dispatch('INCREMENT') | ||
``` | ||
|
||
### 引数によるディスパッチ | ||
|
||
引数に沿って渡すことも可能です: | ||
引数を渡すことも可能です: | ||
|
||
``` js | ||
// ... | ||
|
@@ -42,27 +42,75 @@ mutations: { | |
store.dispatch('INCREMENT', 10) | ||
``` | ||
|
||
ここの `10` は `state` に続く第2引数としてミューテーションハンドラに渡されます。任意の追加引数と同じです。これら引数は、特定のミューテーションに対して**ペイロード**と呼ばれています。 | ||
ここでの `10` は `state` に続く第2引数としてミューテーションハンドラに渡されます。さらに追加される引数についても同様です。これらの引数は、特定のミューテーションに対する**ペイロード**と呼びます。 | ||
|
||
### Vue のリアクティブなルールに従うミューテーション | ||
### オブジェクトスタイルのディスパッチ | ||
|
||
Vuex store のステートは Vue によってリアクティブになっているので、ステートを変異するとき、ステートを監視している Vue コンポーネントは自動的に更新されます。これはまた、Vuex のミューテーションは、純粋な Vue で動作しているとき、同じリアクティブな警告の対象となっているのを意味します: | ||
またオブジェクトを利用してミューテーションをディスパッチすることもできます: | ||
|
||
1. 前もって全て望まれるフィールドによって、あなたの store の初期ステートを初期化することを好みます | ||
```js | ||
store.dispatch({ | ||
type: 'INCREMENT', | ||
payload: 10 | ||
}) | ||
``` | ||
|
||
2. 新しいプロパティをオブジェクトに追加するとき、いずれか必要です: | ||
オブジェクトスタイルを利用するとき、全ての引数をディスパッチされるオブジェクトのプロパティとして含めなければいけないことに注意してください。全体のオブジェクトは、ミューテーションハンドラの第2引数として渡されます。 | ||
|
||
- `Vue.set(obj, 'newProp', 123)` を使用または - | ||
``` js | ||
mutations: { | ||
INCREMENT (state, mutation) { | ||
state.count += mutation.payload | ||
} | ||
} | ||
``` | ||
|
||
- 全く新しいものでオブジェクトを置き換える。例えば、stage-2 の [object spread syntax](https://github.com/sebmarkbage/ecmascript-rest-spread) を使用して、このようにそれを書くことができます: | ||
### サイレントディスパッチ | ||
|
||
場合によっては、プラグインに状態の変化を記録して欲しくないかもしれません。あるいは、短い間隔、ポーリングでのストアへの複数のディスパッチも、常に追跡する必要はないでしょう。これらの状況では、ミューテーションを沈黙( silence )させることが適切であると考えることができます。 | ||
|
||
Note: サイレントディスパッチは可能な限り避けるべきです。サイレントミューテーションは、開発ツールの全ての状態の変更を追跡するという規約を壊します。絶対に必要だという状況で控えめに使用してください。 | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
|
||
|
||
``` js | ||
/** | ||
* 例: プログレス アクション | ||
* 追跡する必要がない変更を頻繁に送ります | ||
**/ | ||
export function start(store, options = {}) { | ||
let timer = setInterval(() => { | ||
store.dispatch({ | ||
type: INCREMENT, | ||
silent: true, | ||
payload: { | ||
amount: 1, | ||
}, | ||
}); | ||
if (store.state.progress === 100) { | ||
clearInterval(timer); | ||
} | ||
}, 10); | ||
} | ||
``` | ||
|
||
### Vue のリアクティブなルールに則ったミューテーション | ||
|
||
Vuex store のステートは Vue によってリアクティブになっているので、ステートを変更すると、ステートを監視している Vue コンポーネントは自動的に更新されます。これは、Vuex のミューテーションは、通常の Vue で動作させているときと同じリアクティブな警告の対象となることを意味します: | ||
|
||
1. 前もって、全ての必要なフィールドによって、ストアの初期状態を初期化することを好みます | ||
|
||
2. 新しいプロパティをオブジェクトに追加するとき、以下のいずれかが必要です: | ||
|
||
- `Vue.set(obj, 'newProp', 123)` を使用するか - | ||
|
||
- 全く新しいオブジェクトで既存のオブジェクトを置き換える。例えば、stage-2 の [object spread syntax](https://github.com/sebmarkbage/ecmascript-rest-spread) を使用して、以下のように書くことができます: | ||
|
||
``` js | ||
state.obj = { ...state.obj, newProp: 123 } | ||
``` | ||
|
||
### ミューテーション名に対して定数を使用 | ||
### ミューテーション名に定数を使用する | ||
|
||
ミューテーション名には定数を使用することが一般的です。コードに対してリンタのようなツールの長所を利用することができ、そして、単一ファイルに全ての定数を設定することは、あなたの協力者にミューテーションがアプリケーション全体で可能であるかが一目見ただけで理解できるビューを得ることができます: | ||
ミューテーション名には定数を使用することが一般的です。これは、コードに対してリントツールのようなツールを利用できるという利点があり、また、単一ファイルに全ての定数を設定することで、共同で作業する人にアプリケーション全体で何のミューテーションが可能であるか一目見ただけで理解できるようにします: | ||
|
||
``` js | ||
// mutation-types.js | ||
|
@@ -86,10 +134,24 @@ const store = new Vuex.Store({ | |
}) | ||
``` | ||
|
||
定数を使用するかどうか大部分が好みであり、それは多くの開発者による大規模アプリケーションで役に立ちますが、好きではないならば、それは完全にオプションです。 | ||
定数を使用するかどうか大抵は好みであり、多くの開発者による大規模アプリケーションで役に立ちますが、もし好きではないならば、それは完全にオプションです。 | ||
|
||
### ミューテーションは同期的でなければならない | ||
|
||
ひとつの重要なルールを覚えておきましょう。それは、ミューテーションハンドラ関数は同期的でなければならないということです。なぜか? 次の例で考えてみましょう: | ||
|
||
```js | ||
mutations: { | ||
SOME_MUTATION (state) { | ||
api.callAsyncMethod(() => { | ||
state.count++ | ||
}) | ||
} | ||
} | ||
``` | ||
|
||
### アクションの上へ | ||
いま、ミューテーションのログを見て、アプリケーションのデバッグを行っていることを想像してください。全てのミューテーションはログに記録されていて、ミューテーションの前後の状態のスナップショットを比較することが可能です。しかし、例のミューテーション内の非同期コールバックは、それを不可能にします: そのコールバックは、ミューテーションがディスパッチされたときにまだ呼ばれません。そして、コールバックが実際いつ呼ばれるかは分かりません。いかなる状態変更でも、コールバック内で起きる場合は本質的に追跡不可能です。 | ||
|
||
これまでのところ、`store.dispatch` の手動呼び出しによってミューテーションをトリガしていました。これは実行可能なアプローチですが、実際には私たちのコンポーネントのコードでこれを行うことはほとんどありません。ほとんどの時間、[アクション](actions.md) を呼び出し、非同期データフェッチングのようなより複雑なロジックをカプセル化することができます。 | ||
### アクションに続けて | ||
|
||
また、全てのミューテーションハンドラは**同期**でなければならないという、1つ重要なルールを覚えておきましょう。任意の非同期な操作はアクションに属しています。 | ||
状態変更を非同期に組み合わせることは、プログラムの動きを予測することを非常に困難にするかもしれません。例えば、状態を変更する非同期コールバックを持った2つのメソッドを両方呼び出しとき、どうやってそれらが呼び出されたか、先に呼び出されたかのはどちらかを知ればよいのでしょう? 2つの概念を分離したい理由は明確です。 Vuex では、全ての状態変更は同期的におこなうという作法になっています。全ての非同期命令は [アクション](actions.md) の内部でおこなうことになるでしょう。 |
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
日本語訳ガイドラインに沿う場合、
state
の前後に半角スペースを入れるといいでしょう。