File tree Expand file tree Collapse file tree 7 files changed +130
-165
lines changed Expand file tree Collapse file tree 7 files changed +130
-165
lines changed Original file line number Diff line number Diff line change 1
1
# 目录
2
2
3
- > 注意:中文版文档目前只更新到 0.2.x 版本,最新版本的文档请看英文版。
3
+ > 注意:中文版文档更新可能滞后,最新版本的文档请看英文版。
4
+ > 请确保按顺序阅读
4
5
5
6
- [ 什么是 Vuex?] ( intro.md )
6
- - [ 快速开始 ] ( quickstart .md)
7
- - [ 教程 ] ( tutorial.md )
8
- - [ 核心概念] ( concepts.md )
9
- - [ State] ( state.md )
10
- - [ Mutations] ( mutations.md )
7
+ - [ 准备开始 ] ( getting-started .md)
8
+ - [ 简易教程 ] ( tutorial.md )
9
+ - 核心概念
10
+ - [ State 和 Getters ] ( state.md )
11
+ - [ Mutations(状态变更) ] ( mutations.md )
11
12
- [ Actions] ( actions.md )
12
13
- [ 数据流] ( data-flow.md )
13
14
- [ 应用结构] ( structure.md )
16
17
- [ 表单处理] ( forms.md )
17
18
- [ 测试] ( testing.md )
18
19
- [ 热重载] ( hot-reload.md )
19
- - [ API Reference ] ( api.md )
20
+ - [ API 参考文档 ] ( api.md )
Load Diff This file was deleted.
Original file line number Diff line number Diff line change
1
+ # 准备开始
2
+
3
+ 每一个 Vuex 应用的核心就是 ** store** (仓库)。"store" 基本上就是一个容器,它包含着你应用里大部分的 ** 状态** (即 ** state** ). Vuex 和单纯的全局对象有以下两点不同:
4
+
5
+ 1 . Vuex 的状态存储是响应式的. 当 Vue 组件从 store 中读取状态的时候, 若 store 中的状态发生变化,那么相应的组件也会相应地高效地得到更新.
6
+
7
+ 2 . 你不能直接改变 store 中的状态。改变 store 中的状态的唯一途径就是显式地分发 ** 状态变更事件** (explicitly dispatching ** mutations** )。这样使得我们可以方便地跟踪每一个状态的变化,从而让我们能够实现一些工具帮助我们更好地了解我们的应用。
8
+
9
+ ### 最简单的 store
10
+
11
+ > ** 注意** :我们将会在后续的文档中用 ES2015 语法进行案例展示。如果你还没能掌握 ES2015,[ 你得抓紧了] ( https://babeljs.io/docs/learn-es2015/ ) !本文同样假设你已经了解了 Vue 本体的官方文档中[ 构建大型应用] ( http://vuejs.org.cn/guide/application.html ) 章节所涉及的概念.
12
+
13
+ 创建 Vuex store 的过程相当直截了当 - 只要提供一个初始化的 state 对象,以及一些 mutations:
14
+
15
+ ``` js
16
+ import Vuex from ' vuex'
17
+
18
+ const state = {
19
+ count: 0
20
+ }
21
+
22
+ const mutations = {
23
+ INCREMENT (state ) {
24
+ state .count ++
25
+ }
26
+ }
27
+
28
+ export default new Vuex .Store ({
29
+ state,
30
+ mutations
31
+ })
32
+ ```
33
+
34
+ 现在,你可以通过 ` store.state ` 来读取 ` state ` 对象,还可以通过 dispatch 某 mutation 的名字来触发这些状态变更:
35
+
36
+ ``` js
37
+ store .dispatch (' INCREMENT' )
38
+
39
+ console .log (store .state .count ) // -> 1
40
+ ```
41
+
42
+ 如果你倾向于对象风格的分发方式,你可以用这种语法:
43
+
44
+ ``` js
45
+ // 效果同上
46
+ store .dispatch ({
47
+ type: ' INCREMENT'
48
+ })
49
+ ```
50
+
51
+ 再次强调,我们通过分发 mutation 的方式,而非直接改变 ` store.state.count ` ,是因为我们想要更明确地追踪到状态的变化。这个简单的约定能够让你的意图更加明显,这样你在阅读代码的时候能更容易地解读应用内部的状态改变。此外,这样也让我们有机会去实现一些能记录每次状态改变,保存状态快照的调试工具。有了它,我们甚至可以实现如时间穿梭般的调试体验。
52
+
53
+ 以上只是一个用来展示 store 究竟是什么的一个极简栗子。但是 Vuex 可不仅仅是状态存储。接下来,我们将会更深入地探讨一些核心概念:[ State(状态)] ( state.md ) ,[ Mutations(变更)] ( mutations.md ) 和 [ Actions(动作)] ( actions.md ) 。
Original file line number Diff line number Diff line change 1
1
## 什么是 Vuex?
2
2
3
- Vuex 是一个专门为 Vue.js 应用设计的状态管理架构 。它借鉴了 [ Flux] ( https://facebook.github.io/flux/ ) 和 [ Redux] ( https://github.com/rackt/redux ) 的设计思想,但简化了概念和 API,并且采用了一种更加符合 Vue.js 的数据响应系统(reactivity system)的实现 。
3
+ Vuex 是一个专门为 Vue.js 应用所设计的集中式状态管理架构 。它借鉴了 [ Flux] ( https://facebook.github.io/flux/ ) 和 [ Redux] ( https://github.com/rackt/redux ) 的设计思想,但简化了概念,并且采用了一种为能更好发挥 Vue.js 数据响应机制而专门设计的实现 。
4
4
5
5
## 我为什么需要它?
6
6
7
- 当你的应用还很简单的时候,你可能并不需要 Vuex。我也并不建议在所有的场合都使用 Vuex。但是,如果你正在构建一个较大规模的 SPA,你可能已经开始思考应该如何处理 Vue 组件之外的应用结构 。这就是 Vuex 要解决的问题 。
7
+ 当你的应用还很简单的时候,你多半并不需要 Vuex。也不建议过早地使用 Vuex。但如果你正在构建一个中型以上规模的 SPA,你很有可能已经需要思考应该如何更好地归纳 Vue 之外,应用的其他组成部分 。这就是 Vuex 要大显身手的时刻 。
8
8
9
- 我们在用 Vue.js 的时候,通常会把状态储存在组件的内部。也就是说,每一个组件都拥有一部分状态,整个应用的状态是分散在多个地方的。然而我们经常遇到的一个需求就是需要把一部分的状态共享给其它组件。通常我们会使用 Vue 或是第三方的事件系统去达到这个目的。但基于事件的问题在于,事件流会在逐渐增长的组件树中变得复杂,并且在出现问题的时候很难去发现问题的所在(典型的如事件 ping-pong,即子组件 dispatch 到父组件,再由父组件 broadcast) 。
9
+ 我们在单独使用 Vue.js 的时候,通常会把状态储存在组件的内部。也就是说,每一个组件都拥有当前应用状态的一部分,整个应用的状态是分散在各个角落的。然而我们经常会需要把状态的一部分共享给多个组件。一个常见的解决策略为:使用定制的事件系统,让一个组件把一些状态“ * 发送 * ”到其他组件中。这种模式的问题在于,大型组件树中的事件流会很快变得非常繁杂,并且调试时很难去找出究竟哪错了 。
10
10
11
- 为了更好的解决在大型应用中共享状态的问题,我们需要把组件的本地状态 (component local state) 和应用状态 (application level state) 区分开来 。应用级的状态不属于任何特定的组件,但每一个组件仍然可以通过 Vue 的响应系统去侦听其变化从而自动更新 DOM。通过把应用的状态管理逻辑放在同一个地方,我们就不需要在各个地方去处理各种事件,因为任何牵扯到多个组件的东西,都会放在这个地方。这样做也能使记录和检查状态的改变成为可能,甚至可以做出像 time-travel 这样的调试功能。
11
+ 为了更好的解决在大型应用中状态的共用问题,我们需要对组件的 ** 组件本地状态 ** (component local state) 和 ** 应用层级状态 ** (application level state) 进行区分 。应用级的状态不属于任何特定的组件,但每一个组件仍然可以监视(Observe)其变化从而响应式地更新 DOM。通过汇总应用的状态管理于一处,我们就不必到处传递事件。因为任何牵扯到一个以上组件的逻辑,都应该写在这里。此外,这样做也能让我们更容易地记录并观察状态的变更(Mutation,原意为突变),甚至可以实现出华丽如时光旅行一般的调试效果。(译注:是时候安利一波 [ vue-devtools ] ( https://github.com/vuejs/vue-devtools ) 了)
12
12
13
- Vuex 也对状态管理的代码分离有一定程度的约束,但不会影响你实际代码结构的灵活性 。
13
+ Vuex 也对如何管理分撒各地的状态增加了一些约束,但仍保留有足够面对真实使用场景的灵活性 。
Load Diff This file was deleted.
You can’t perform that action at this time.
0 commit comments