vuex-help
Version:
a utilies library reduce boilerplate for vuex
1 lines • 612 kB
JSON
{"index":{"version":"0.5.12","fields":[{"name":"title","boost":10},{"name":"keywords","boost":15},{"name":"body","boost":1}],"ref":"url","documentStore":{"store":{"./":["3.0","action","api","getter","introduct","modul","mutat","state","typescript","vue@>=2.5,反之亦然。","vuex","vuex@>=","严格模式","依赖","安装","开始","插件","文档","是什么?","更新记录","核心概念","注意:对于","测试","热重载","用户来说","表单处理","项目结构"],"installation.html":["'vue'","'vuex'","/","add","build","cd","cdn","clone","dev","git","github","https://github.com/vuejs/vuex.git","https://unpkg.com/vuex","https://unpkg.com/vuex@2.0.0","import","instal","node_modules/vuex","npm","run","save","script","unpkg.com","vue","vue.use()","vue.use(vuex)","vuex","vuex:","yarn","上克隆代码并自己构建。","上发布的最新版本。您也可以通过","之后引入","会进行自动安装:","分支下的最新版本,您可以直接从","在","在一个模块化的打包系统中,您必须显式地通过","如果需要使用","安装","引用","当使用全局","提供了基于","时,不需要以上安装过程。","来安装","标签引用","的","直接下载","自己构建","这样的方式指定特定的版本。","链接。以上的链接会一直指向"],"intro.html":["()","//","0","`","`,","abramov","action","actions,响应在","architecture。与其他模式不同的是,vuex","bu","count","count:","dan","data","devtool","elm","event","extension,提供了诸如零配置的","flux","flux、redux、和","global","increment","methods:","new","redux","return","state","state,驱动应用的数据源;","template:","this.count++","time","travel","view","view,以声明方式将","vue","vue({","vue.j","vuex","vuex。一个简单的","vuex?","{","{{","}","})","},","}}","上的用户输入导致的状态变化。","也集成到","什么情况下我应该使用","什么是“状态管理模式”?","以下是一个表示“单向数据流”理念的极简示意:","但是,当我们的应用遇到多个组件共享状态时,单向数据流的简洁性很容易被破坏:","另外,通过定义和隔离状态管理中的各种概念并强制遵守一定的规则,我们的代码将会变得更结构化且易维护。","可以帮助我们管理共享状态,但也附带了更多的概念和框架。这需要对短期和长期效益进行权衡。","可能是繁琐冗余的。确实是如此——如果您的应用够简单,您最好不要使用","因此,我们为什么不把组件的共享状态抽取出来,以一个全局单例模式管理呢?在这种模式下,我们的组件树构成了一个巨大的“视图”,不管在树的哪个位置,任何组件都能获取状态或者触发行为!","多个视图依赖于同一状态。","如果您不打算开发大型单页应用,使用","对于问题一,传参的方法对于多层嵌套的组件将会非常繁琐,并且对于兄弟组件间的状态传递无能为力。对于问题二,我们经常会采用父子组件直接引用或者通过事件来变更和同步状态的多份拷贝。以上的这些模式非常脆弱,通常会导致无法维护的代码。","将会成为自然而然的选择。引用","就足够您所需了。但是,如果您需要构建是一个中大型单页应用,您很可能会考虑如何更好地在组件外部管理状态,vuex","应用程序开发的状态管理模式。它采用集中式存储管理应用的所有组件的状态,并以相应的规则保证状态以一种可预测的方式发生变化。vuex","映射到视图;","是一个专为","是专门为","是什么?","来自不同视图的行为需要变更同一状态。","架构就像眼镜:您自会知道什么时候需要它。","的作者","的官方调试工具","的细粒度数据响应机制来进行高效的状态更新。","的话说就是:","背后的基本思想,借鉴了","虽然","计数应用开始:","让我们从一个简单的","设计的状态管理库,以利用","调试、状态快照导入导出等高级调试功能。","这个状态自管理应用包含以下几个部分:","这就是"],"getting-started.html":["(commit)","(state)","(state)。vuex","//","0","1","=",">","console.log(store.state.count)","const","count:","es2015","es2015,你得抓紧了!","increment","method","mutat","mutations:","mutation。","mutation。这样使得我们可以方便地跟踪每一个状态的变化,从而让我们能够实现一些工具帮助我们更好地了解我们的应用。","mutation:","new","state","state.count++","state:","store","store.commit","store.commit('increment')","store.st","store.state.count,是因为我们想要更明确地追踪到状态的变化。这个简单的约定能够让你的意图更加明显,这样你在阅读代码的时候能更容易地解读应用内部的状态改变。此外,这样也让我们有机会去实现一些能记录每次状态改变,保存状态快照的调试工具。有了它,我们甚至可以实现如时间穿梭般的调试体验。","store。创建过程直截了当——仅需要提供一个初始","store(仓库)。“store”基本上就是一个容器,它包含着你的应用中大部分的状态","vue","vue.use(vuex)","vuex","vuex.store({","{","}","})","},","中提交","中的状态。改变","中的状态发生变化,那么相应的组件也会相应地得到高效更新。","中的状态是响应式的,在组件中调用","中的状态的唯一途径就是显式地提交","中的状态简单到仅需要在计算属性中返回即可。触发变化也仅仅是在组件的","中读取状态的时候,若","之后,让我们来创建一个","你不能直接改变","再次强调,我们通过提交","和单纯的全局对象有以下两点不同:","如果在模块化构建系统中,请确保在开头调用了","安装","对象和一些","应用的核心就是","开始","接下来,我们将会更深入地探讨一些核心概念。让我们先从","提示:我们将在后续的文档示例代码中使用","方法触发状态变更:","最简单的","来获取状态对象,以及通过","概念开始。","每一个","现在,你可以通过","由于","的方式,而非直接改变","的状态存储是响应式的。当","组件从","记数应用示例。","语法。如果你还没能掌握","这是一个最基本的"],"core-concepts.html":["action","getter","modul","mutat","state","vuex","在这一章,我们将会学到","来说是必要的。","核心概念","深入理解所有的概念对于使用","的这些核心概念。他们是:","让我们开始吧。"],"state.html":["'#app',","'count'","'count',","'vuex'","()","(ssot)”而存在。这也意味着,每个应用将仅仅包含一个","(state)","*/","+","...","...mapstate({","/*","//","3","=","=>","])","`","`state","`this`","`{{","app","components:","comput","computed:","const","count","count:","countalias:","counter","countpluslocalst","default","dom。","ecmascript","el:","export","import","localcomput","mapstat","mapstate([","mapstate({","new","return","stage","state","state.count","state.count,","state.count`","store","store,","store.state.count","template:","this.$stor","this.$store.state.count","this.count","this.localcount","vue","vue({","vue.use(vuex)):","vuex","vuex.mapst","vuex。虽然将所有的状态放到","{","}","})","},","}}`,","“store”","为","为了能够使用","会使状态变化更显式和易调试,但也会使代码变得冗长和不直观。如果有些状态严格属于单个组件,最好还是作为组件的局部状态。你应该根据你的应用开发需要进行权衡和确定。","传一个字符串数组。","传字符串参数","使用","使用单一状态树——是的,用一个对象就包含了全部的应用层级状态。至此它便作为一个“唯一数据源","使用对象展开运算符将此对象混入到外部对象中","函数返回的是一个对象。我们如何将它与局部计算属性混合使用呢?通常,我们需要使用一个工具函数将多个对象合并为一个,以使我们可以将最终对象传给","创建一个","单一状态树","单状态树和模块化并不冲突——在后面的章节里我们会讨论如何将状态和状态变更事件分布到各个子模块中。","变化的时候,","在","在单独构建的版本中辅助函数为","实例。单一状态树让我们能够直接地定位任一特定的状态片段,在调试的过程中也能轻易地取得整个当前应用状态的快照。","实例中读取状态最简单的方法就是在计算属性中返回某个状态:","实例会注入到根组件下的所有子组件中,且子组件能通过","对象展开运算符","对象提供给","属性。但是自从有了对象展开运算符(现处于","并不意味着你需要将所有的状态放入","当一个组件需要获取多个状态时候,将这些状态都声明为计算属性会有些重复和冗余。为了解决这个问题,我们可以使用","当映射的计算属性的名称与","把","提案","映射","每当","然而,这种模式导致组件依赖全局状态单例。在模块化的构建系统中,在每个需要使用","状态","的子节点名称相同时,我们也可以给","的实例注入所有的子组件","的实现:","的状态存储是响应式的,从","的组件中需要频繁地导入,并且在测试组件时需要模拟状态。","等同于","箭头函数可使代码更简练","组件","组件中展示状态呢?由于","组件中获得","组件仍然保有局部状态","获取局部状态,必须使用常规函数","访问到。让我们更新下","辅助函数","辅助函数帮助我们生成计算属性,让你少按几次键:","选项,提供了一种机制将状态从根组件“注入”到每一个子组件中(需调用","选项,该","选项,这可以把","通过","通过在根实例中注册","那么我们如何在","都会重新求取计算属性,并且触发更新相关联的","阶段),我们可以极大地简化写法:"],"getters.html":["'...',","'anothergetter',","'donetodoscount'","'donetodoscount',","'vuex'","()","(id)","(state)","(state,","...","...mapgetters([","//","1","1,","2,","=","===","=>",">","[","[{","]","])","`store.getters.donetodoscount`","`this.donecount`","comput","computed:","const","default","done:","donecount:","donetodos:","donetodoscount","donetodoscount:","export","fals","getter","getters)","getters.donetodos.length","getters:","gettodobyid:","id)","id:","import","mapgett","mapgetters({","new","return","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({","{","}","})","},","}]","中定义“getter”(可以认为是","中派生出一些状态,例如对列表进行过滤并计数:","中的","为","也可以接受其他","会暴露为","传参。在你对","作为其第一个参数:","作为第二个参数:","你也可以通过让","使用对象展开运算符将","允许我们在","如果你想将一个","如果有多个组件需要用到此属性,我们要么复制这个函数,或者抽取到一个共享函数然后在多处导入它——无论哪种方式都不是很理想。","对象中","对象:","属性另取一个名字,使用对象形式:","我们可以很容易地在任何组件中使用它:","接受","映射","映射到局部计算属性:","有时候我们需要从","混入","的计算属性)。就像计算属性一样,getter","的返回值会根据它的依赖被缓存起来,且只有当它的依赖值发生了改变才会被重新计算。","辅助函数","辅助函数仅仅是将","返回一个函数,来实现给","里的数组进行查询时非常有用。"],"mutations.html":["\"increment\"","'./mutat","'increment'","'increment',","'incrementby'","'newprop',","'some_mutation'","'vuex'","(handler)。这个回调函数就是我们实际进行状态更改的地方,并且它会接受","(state)","(state,","(type)","+=","...","...mapmutations([","...mapmutations({","...state.obj,","//","1","10","10)","123","123),","3","=","=>","[some_mutation]","]),","`mapmutations`","`this.$store.commit('increment')`","`this.$store.commit('incrementby',","`this.add()`","`this.increment()`","`this.incrementby(amount)`","action。","add:","amount)`","amount:","api.callasyncmethod(()","app","const","count:","debug","default","devtool","es2015","export","flux","handler","handler。这个选项更像是事件注册:“当触发一个类型为","handler,你需要以相应的","import","increment","linter","mapmut","method","methods:","mutat","mutations:","mutation。vuex","mutation,或者使用","n","n)","new","newprop:","payload)","payload.amount","some_mut","somemut","stage","state","state.count","state.count++","state.obj","state:","store","store.commit","store.commit('increment')","store.commit('increment',","store.commit({","store.j","store)。","this.$store.commit('xxx')","type","type:","types'","types.j","vue","vue.set(obj,","vuex","vuex.store({","{","}","})","},","一个","一条重要的原则就是要记住","一样遵守一些注意事项:","一目了然:","下一步:action","不知道什么时候回调函数实际上被调用——实质上任何在回调函数中进行的状态的改变都是不可追踪的。","中初始化好所有所需属性。","中混合异步调用会导致你的程序很难调试。例如,当你调用了两个包含异步回调的","中的","中的异步函数中的回调让这不可能完成:因为当","中的状态是响应式的,那么当我们变更状态时,监视状态的","中的状态的唯一方法是提交","中,mutat","为了处理异步操作,让我们来看一看","之类的工具发挥作用,同时把这些常量放在单独的文件中可以让你的代码合作者对整个","也支持载荷:","也需要与使用","事件类型","事件类型在各种","以新对象替换老对象。例如,利用","任何由","会更易读:","传入额外的参数,即","作为第一个参数:","你不能直接调用一个","你可以向","你可以在组件中使用","使用","使用常量替代","保持不变:","函数,因此","包含的","变更状态","和","回调函数","在","在大多数情况下,载荷应该是一个对象,这样可以包含多个字段并且记录的","在组件中提交","实现中是很常见的模式。这样可以使","对象风格的提交方式","导致的状态变更都应该在此刻完成。","将","属性的对象:","并且观察","当使用对象风格的提交方式,整个对象都作为载荷传给","当需要在对象上添加新属性时,你应该","必须是同步函数","必须是同步函数。为什么?请参考下面的例子:","我们可以使用","或者","提交","提交载荷(payload)","方法:","既然","日志。每一条","时,调用此函数。”要唤醒一个","映射为","更改","最好提前在你的","来改变状态,你怎么知道什么时候回调和哪个先回调呢?这就是为什么我们要区分这两个概念。在","现在想象,我们正在","用不用常量取决于你——在需要多人协作的大型项目中,这会很有帮助。但如果你不喜欢,你完全可以不这样做。","的","的另一种方式是直接使用包含","的响应规则","的对象展开运算符我们可以这样写:","组件也会自动更新。这也意味着","被记录,devtool","触发的时候,回调函数还没有被调用,devtool","调用","调用(需要在根节点注入","载荷(payload):","辅助函数将组件中的","都是同步事务:","都有一个字符串的","都需要捕捉到前一状态和后一状态的快照。然而,在上面的例子中","需遵守","非常类似于事件:每个","风格的计算属性命名功能来使用一个常量作为函数名"],"actions.html":["'increment'","'increment',","'incrementasync',","'incrementby'","'vuex'","()","(context)","(state)","({",")","...","...mapactions([","...mapactions({","/","//","0","10","1000)","=","=>","[...state.cart.added]","]),","`mapactions`","`this.$store.dispatch('increment')`","`this.$store.dispatch('incrementby',","`this.add()`","`this.increment()`","`this.incrementby(amount)`","action","actiona","actionb","actions:","action,以处理更加复杂的异步流程?","action,或者使用","action:","add:","amount)`","amount:","api","async","await","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","context.commit","context.commit('increment')","context.gett","context.st","count:","default","dispatch('actiona')","dispatch('actiona').then(()","dispatch,","es2015","export","getdata()","getdata())","getotherdata()","getotherdata())","getters。当我们在之后介绍到","import","increment","incrementasync","mapact","method","methods:","modul","mutat","mutations:","mutation,不同在于:","mutation,或者通过","mutation,而不是直接变更状态。","mutation:","new","products)","products,","promis","promise((resolve,","promise,并且","promise:","reject)","resolve()","return","savedcartitem","savedcartitems)","settimeout(()","shop.buyproducts(","state","state.count++","state:","store","store.dispatch","store.dispatch('actiona').then(()","store.dispatch('increment')","store.dispatch('incrementasync',","store.dispatch({","store):","this.$store.dispatch('xxx')","type:","vuex.store({","{","}","})","},","一个","中也可以:","乍一眼看上去感觉多此一举,我们直接分发","也支持载荷:","产生的副作用(即状态变更)。","什么时候结束呢?更重要的是,我们如何才能组合多个","仍旧返回","以对象形式分发","以载荷形式分发","你在组件中使用","假设","内部执行异步操作:","函数。在这种情况下,只有当所有触发函数完成后,返回的","函数接受一个与","分发","参数解构","发出结账请求,然后乐观地清空购物车","可以包含任意异步操作。","可以处理被触发的","和","和分发多重","在不同模块中可以触发多个","在另外一个","在组件中分发","失败操作","完成","实例具有相同方法和属性的","实例本身了。","实践中,我们会经常用到","对象为什么不是","对象,因此你可以调用","将","就不受约束!我们可以在","岂不更方便?实际上并非如此,还记得","很多次的时候):","必须同步执行这个限制么?action","成功操作","才会执行。","把当前购物车的物品备份起来","接受一个成功回调和一个失败回调","提交一个","提交的是","支持同样的载荷方式和对象方式进行分发:","方法触发:","时,你就知道","映射为","最后,如果我们利用","来看一个更加实际的购物车示例,涉及到调用异步","来简化代码(特别是我们需要调用","来获取","来记录","注意我们正在进行一系列的异步操作,并且通过提交","现在你可以:","的","的处理函数返回的","等待","类似于","组合","让我们来注册一个简单的","调用(需要先在根节点注入","购物","辅助函数将组件的","返回的是","通常是异步的,那么如何知道","通过","首先,你需要明白"],"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","()","(ctx,","(option","(state)","(state,","(store)","({","(例如当","*","+","...","...mapactions('some/nested/module',","...mapactions([","...mapstate('some/nested/module',","...mapstate({","//","0","1)","2","2.3.0+","=","===","=>",">","[","])","`mymodule`","`namespaced`","`nested/mymodule`","`root`","`rootgetters`","`some/nested/module`","`state`","a:","account:","action","actions:","action、mut","action。","action,局部状态通过","assets)","assets)时不需要在同一模块内额外添加空间名前缀。更改","b:","commit","commit('account/login')","commit('increment')","commit('somemutation')","commit('somemutation',","commit,","commit。换言之,你在使用模块内容(modul","computed:","const","context","context.rootstate:","context.st","count:","createnamespacedhelp","createnamespacedhelpers('some/nested/module')","createplugin","data","default","dispatch","dispatch('account/login')","dispatch('someotheraction')","dispatch('someotheraction',","dispatch,","doublecount","export","fals","foo:","function","getter","getters,","getters.somegett","getters.someothergett","getters:","getters['account/isadmin']","getters['account/posts/popular']","getters['account/profile']","getter、act","getter,dispatch","getter,rootst","getter,也会通过","getter,接收的第一个参数是模块的局部状态对象。","getter,根节点状态会作为第三个参数暴露出来:","import","increment","incrementifoddonrootsum","isadmin","login","mapact","mapgetters,","mapmut","mapstate,","methods:","modul","module,","modulea","modulea,","moduleb","modules:","mutat","mutation,","mutations:","mutation,将","mypage:","myreusablemodul","namespac","namespaced:","new","null,","options.namespac","payload)","popular","posts:","preservest","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:","state、mutation、action、getter、甚至是嵌套子模块——从上至下进行同样方式的分割:","state。你可以通过","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)","store,他们公用同一个模块","store,可能需要考虑模块的空间名称问题。对于这种情况,你可以通过插件的参数对象来允许用户指定空间名称:","sumwithrootcount","sync","true","true,","vue","vuex","vuex.store({","{","{})","||","}","})","})。","},","中多次注册同一个模块","中查找","中附加新模块的方式来使用","中,`getters`","为了解决以上问题,vuex","之后就可以通过","也被局部化了","他们可以接受","会作为第三和第四参数传入","会收到局部化的","作为第三参数传给","作出响应。","你也可以使用","你可以使用","允许我们将","分割成模块(module)。每个模块拥有自己的","创建之后,你可以使用","创建基于某个命名空间辅助函数。它返回一个对象,对象里有新的绑定在给定命名空间值上的组件绑定辅助函数:","创建多个","即可。","及","同样,对于模块内部的","启用了命名空间的","命名空间","和","在","在一个","在命名空间模块内访问全局内容(global","在注册一个新","在这个模块中,","在这个模块的","如果你希望使用全局","如果你开发的插件(plugin)提供了模块并允许用户将其添加到","如果希望你的模块具有更高的封装度和复用性,你可以通过添加","如果我们使用一个纯对象来声明模块的状态,那么这个状态对象会通过引用被共享,导致状态对象被修改时","实际上这和","对于模块内部的","对于这种情况,你可以将模块的空间名称字符串作为第一个参数传递给上述函数,这样所有绑定都会自动将该模块作为上下文。于是上面的例子可以简化为:","对象就有可能变得相当臃肿。","对象是模块的局部状态","对象的属性传入","属性不会对其产生影响","属性以访问根","属性后不需要修改模块内的代码。","嵌套模块","带命名空间的绑定函数","当使用","或","或提交","或模块间数据互相污染的问题。","把空间名字添加到插件模块的类型(type)中去","插件函数","插件可以通过在","插件就是通过动态注册模块将","支持):","方法注册模块:","时声明的模块)。","时,为了在服务端渲染中避免有状态的单例)","时,你很有可能想保留过去的","是同样的问题。因此解决办法也是相同的——使用一个函数来声明模块状态(仅","是注册在全局命名空间的——这样使得多个模块能够对同一","暴露出来,根节点状态则为","有时我们可能需要创建一个模块的多个实例,例如:","来动态卸载模块。注意,你不能使用此方法卸载静态模块(即创建","模块内容(modul","模块内的状态已经是嵌套的了,使用","模块动态注册","模块动态注册功能使得其他","模块的局部状态","模块重用","注册嵌套模块","注册模块","然后返回","由于使用单一状态树,应用的所有状态会集中到一个比较大的对象。当应用变得非常复杂时,store","的方式使其成为命名空间模块。当模块被注册后,它的所有","的状态","的第四个参数来调用","等等...","管理状态。例如,vuex","组件内的","结合在一起,实现应用的路由状态管理。","给插件开发者的注意事项","继承父模块的命名空间","而且,你可以通过使用","若需要在全局命名空间内分发","被局部化了","访问模块的状态。","这些函数来绑定命名空间模块时,写起来可能比较繁琐:","这里的","进一步嵌套命名空间","选项将其归档:store.registermodule('a',","选项是","通过插件的参数对象得到空间名称","都会自动根据模块注册的路径调整命名。例如:","默认情况下,模块内部的"],"structure.html":["#","...","action","actions.j","action、mut","api","app.vu","cart.j","compon","getter","index.html","index.j","main.j","modul","mutat","mutations.j","products.j","store","vuex","│","└──","├──","产品模块","分割到单独的文件。","只要你遵守以上规则,如何组织代码随你便。如果你的","和","对于大型应用,我们会希望把","对象中。","并不限制你的代码结构。但是,它规定了一些需要遵守的规则:","应用层级的状态应该集中到单个","异步逻辑都应该封装到","我们组装模块并导出","抽取出api请求","提交","文件太大,只需将","是更改状态的唯一方法,并且这个过程是同步的。","根级别的","的地方","相关代码分割到模块中。下面是项目结构示例:","请参考购物车示例。","购物车模块","里面。","项目结构"],"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`","browserifi","browserify,让构建工具帮我们处理:","collapsed:","consol","console,","const","createlogg","createlogger({","createplugin","createvuexlogger。","createwebsocketplugin","createwebsocketplugin(socket)","data","data)","default","defineplugin","devtools,你可能不需要此插件。","envifi","export","false,","false。","filter","function","import","logger","logger:","mutat","mutation.payload)","mutation.typ","mutations,","mutationtransform","mutation,插件可以用来同步数据源到","myplugin","mypluginwithsnapshot","new","nextstat","nextstate...","payload","plugin","plugins:","prevstat","process.env.node_env","return","socket.emit('update',","socket.on('data',","state","state)","state,","state.subtre","stateafter)","statebefore,","store","store.commit('receivedata',","store.subscribe((mutation,","store.subscribe(mut","store。例如,同步","store(下面是个大概例子,实际上","transform","true","type,","vue","vuex","vuex.store({","webpack","websocket","{","}","})","},","上面插件会默认启用。在发布阶段,你需要使用","为","之后调用","作为唯一参数:","使","例如,只返回指定的子树","保存状态,用于下一次","内置","函数有几个配置项:","初始化后调用","即可","和","在开始记录之前转换状态","在插件中不允许直接修改状态——类似于组件,只能通过提交","在插件内提交","如果正在使用","实现,默认为","对象","当","快照","我们可以按任意方式格式化","或","或者是","按照","接受","插件","插件会生成状态快照,所以仅在开发环境使用。","插件就是一个函数,它接收","数据源到","方法可以有更多选项来完成复杂任务):","日志插件还可以直接通过","是个","有时候插件需要获得状态的“快照”,比较改变的前后状态。想要实现这项功能,你需要对状态对象进行深拷贝:","来触发变化。","标签引入,它会提供全局方法","格式记录","每次","比较","然后像这样使用:","生成","生成状态快照的插件应该只在开发阶段使用,使用","的","的格式为","的钩子。vuex","自动展开记录的","自定义","自带一个日志插件用于一般的调试:","若","要注意,logger","选项,这个选项暴露出每次","通过提交","需要被记录,就让它返回","顺便,`mutation`"],"strict.html":["!==","'production'","...","//","=","const","mutat","new","process.env.node_env","store","strict:","true","true:","vuex.store({","})","不要在发布环境下启用严格模式!严格模式会深度监测状态树来检测不合规的状态变更——请确保在发布环境下关闭严格模式,以避免性能损失。","严格模式","函数引起的,将会抛出错误。这能保证所有的状态变更都能被调试工具跟踪到。","在严格模式下,无论何时发生了状态变更且不是由","开发环境与发布环境","开启严格模式,仅需在创建","的时候传入","类似于插件,我们可以让构建工具来处理这种情况:"],"forms.html":["()","(e)","(state,","(value)","+","...","...mapstate({","//","=","=>","action:","chang","computed:","e.target.value)","input","messag","message)","message:","methods:","model","mutat","mutations:","obj","obj.message。在严格模式中,由于这个修改不是在","return","set","setter","state","state.obj.messag","store","this.$store.commit('updatemessage',","this.$store.state.obj.messag","updatemessag","v","value)","value,然后侦听","vuex","{","}","})","},","上使用","下面是","中很有用的特性。另一个方法是使用带有","中绑定","事件,在事件回调中调用","会比较棘手:","会试图直接修改","假设这里的","函数中执行的,","函数:","双向绑定的计算属性","局部状态”要啰嗦得多,并且也损失了一些","当在严格模式中使用","必须承认,这样做比简单地使用“v","或者","时,在属于","是在计算属性中返回的一个属于","用“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,","({","*/","+","...","...args)",".babelrc):","/*","//","/\\.js$/,","/node_modules/","0","0)","1,","100)","2,","3,","=","===","=>",">=","[","[],","]","])","],","__dirname,","`mutations`","action","action({","actions.j","actions.spec.j","actionsinjector","actionsinjector({","api","api。当测试","api,因此你可以直接用","args,","bundle.j","bundle.js'","bundle。","catch","category:","cb([","chai","commit","commit('receive_products',","commit('request_products')","commit,","const","count","count++","count:","default","describe('actions',","describe('getters',","describe('mutations',","dev","dispatch","documentation。","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","it('filteredproducts',","it('getallproducts',","it('increment',","karma","loader","loader!./actions')","loader!./test.js'。","loader!babel","loader',","loader:","loaders:","loaders。","loader。","localhost:8080/webpack","mocha","mock","module.export","module:","mutaion","mutat","mutations.j","mutations.spec.j","mutation,并且使用","new","node","output:","path:","payload)","payload:","product.categori","products)","products:","requir","require('inject","respons","result","return","server/test","server。","settimeout(()","shop","shop.getproducts(product","state","state,","state.count++","state.products.filter(product","store","store.j","test","test:","testact","testaction(actions.getallproducts,","title:","tri","type:","vue","vuex","vuex.stor","vuex.store({","webpack","webpack.config.j","webpack在真实浏览器环境中进行测试。","{","{},","}","})","},","一样直截了当。","下面是一个测试异步","下面是用","中执行。换种方式,你也可以用","中执行测试","中的","作为命名输出对象","使用","依赖的模块工厂","依赖,可以用","创建以下","创建模块","包含很复杂的计算过程,很有必要测试它们。getter","取个变量名然后把它输出去:","和","和参数调用","在","在浏览器中执行测试","在浏览器中测试","处理之后这些测试应该不依赖任何浏览器","如果你的","安装","应对起来略微棘手,因为它们可能需要调用外部的","应用","很容易被测试,因为它们仅仅是一些完全依赖参数的函数。这里有一个小技巧,如果你在","我们主要想针对","或","打包测试文件。","打包这些测试文件然后在","执行测试","把上述","改成","文件中定义了","断言结果","服务回应","服务层——例如,我们可以把","检查是否没有","模块功能默认输出了","模拟","模拟提交","模拟状态","测试","测试一个","然后:","用以上配置启动","用指定的","用模拟的","的例子(实际上你可以用任何你喜欢的测试框架):","的例子:","的实例,那么你仍然可以给","的时候,我们需要增加一个","的测试与","的示例:","的结果","的辅助函数","编写正确,经过合理地","获取","被","解构","访问","详见","语法处理内联","调用。为了便于解决","调用抽象成服务,然后在测试文件中用","返回一个允许我们注入","进行单元测试。","配置中的","配置(配置好"],"hot-reload.html":["'./modules/a'","'./modules/a'],","'./mutations'","'vue'","'vuex'","()","(module.hot)","...","//","6","=","=>","`.default`","a:","action","api,vuex","babel","browserifi","const","counter","getter。你也可以在","hmr","hot","hot。","import","modul","module.hot.accept(['./mutations',","modulea","modules:","mutat","mutations,","mutations:","mutation、module、act","new","newmodulea","newmut","newmutations,","replac","require('./modules/a').default","require('./mutations').default","state","state,","store","store.hotupdate()","store.hotupdate({","store.j","vue","vue.use(vuex)","vuex","vuex.store({","webpack","{","}","})","中使用","使","使用","加载新模块","参考热重载示例","和","和模块,你需要使用","因为","对于","成为可热重载模块","插件。","支持在开发过程中热重载","方法:","热重载","的","的模块编译格式问题,这里需要加上","获取更新后的模块"],"api.html":["'vuex'","...","...option","//","2.5.0","=","=>","[key:","[type:","`store.commit`","`store.dispatch`","`store.getters`","`store.getters`,只存在于模块中","`store.state`,只存在于模块中","`store.state`,若在模块中则为局部状态","action","actions?,","action。handl","action。opt","action。处理函数总是接受","action。详细介绍","action。返回一个解析所有被触发的","any,","api","array","array)","array,","boolean","cb:","commit(mutation:","commit(type:","commit,","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?,","getter,gett","getter,只读。","hotupdate(newoptions:","import","key","key:","map:","mapactions(namespace?:","mapgetters(namespace?:","mapmut","mapmutations(namespace?:","mapstate(namespace?:","mapstate、mapgetters、mapact","modul","module,","module:","modules?","mutat","mutations,","mutation。handl","mutation。opt","mutation。详细介绍","mutation(用于外部地数据持久化、记录或调试)或者提交","mutation,处理函数总是接受","namespaced?,","new","object","object)","object):","object,","option","options?:","payload?:","plugin","preservestate:","promise。详细介绍","registermodule(path:","replacestate(state:","root:","rootgett","rootstat","rootstate,","state","state)","state,","state。用于服务端渲染。","state。这在你想要重用","store","store.gett","store.getters。","store.st","store.subscribe((mutation,","store.subscribeaction((action,","store,大概长这样:","strict","string","string):","string,","string]:","subscribe(handler:","subscribeaction(handler:","true","true,它允许在命名空间模块里分发根的","true,它允许在命名空间模块里提交根的","unregistermodule(path:","vm.$watch","vue","vuex","vuex.stor","vuex.store({","watch(getter:","websocket","{","|","}","})","},","一个数组,包含应用在","上注册","上的插件方法。这些插件直接接收","与根模块的选项一样,每个模块也包含","中的状态。详细介绍","为组件创建计算属性以返回","以允许保留之前的","会在每个","作为唯一参数,可以监听","作为第一个参数(如果定义在模块中,则为模块的局部状态),payload","作为第一个参数,payload","作为第一个参数,其","作为第二个参数。最后接收一个可选的对象参数表示","作为第二个参数(可选)。","使","关联到","分发","分发的时候调用并接收","创建基于命名空间的组件绑定辅助函数。其返回一个包含","创建组件方法分发","创建组件方法提交","包含了子模块的对象,会被合并到","卸载一个动态模块。详细介绍","参考","只会接收","可以包含","同样指向局部状态。","后的状态作为参数:","和","和经过","响应式地监测一个","在","处理函数以外修改","处理器的","如果你传入返回一个对象的函数,其返回的对象会被用作根","如果在模块中定义则为模块的局部状态","完成后调用,接收","实例属性","实例方法","实例的根","对象。详细介绍","对象包含以下属性:","对象,尤其是对于重用","当定义在一个模块里时会特别一些:","或","所有","接收","描述和当前的","提交","文档","新增","方法接受以下参数:","方法的参数。","方法的返回值,当值改变时调用回调函数。getter","暴露为","暴露出注册的","替换","来说非常有用。详细介绍","构造器选项","某些观察者)","根状态,只读。","注册一个动态模块。详细介绍","注册的","注册监听","热替换新的","的","的对象。它们都已经绑定在了给定的命名空间上。详细介绍","的局部状态作为第一个参数,而不是根状态,并且模块","的根状态。模块的","的根状态,仅用状态合并或时光旅行调试。","的返回值。详细介绍","第一个参数是可选的,可以是一个命名空间字符串。详细介绍","等同于","类型:","组件绑定的辅助函数","要停止监测,直接调用返回的处理函数。","订阅","该功能常用于插件。详细介绍","详细介绍","这两个参数:","进入严格模式,在严格模式下,任何","选项。模块的状态使用","通常用于插件。详细介绍","都会抛出错误。","里可以有","默认值:","(用于内部数据,例如"]},"length":17},"tokenStore":{"root":{"0":{"docs":{"intro.html":{"ref":"intro.html","tf":0.010309278350515464},"getting-started.html":{"ref":"getting-started.html","tf":0.011764705882352941},"actions.html":{"ref":"actions.html","tf":0.002932551319648094},"modules.html":{"ref":"modules.html","tf":0.0015037593984962407},"testing.html":{"ref":"testing.html","tf":0.0037243947858473}},")":{"docs":{"testing.html":{"ref":"testing.html","tf":0.00186219739292365}}}},"1":{"0":{"0":{"0":{"docs":{},")":{"docs":{"actions.html":{"ref":"actions.html","tf":0.005865102639296188}}}},"docs":{},")":{"docs":{"testing.html":{"ref":"testing.html","tf":0.00186219739292365}}}},"docs":{"mutations.html":{"ref":"mutations.html","tf":0.006153846153846154},"actions.html":{"ref":"actions.html","tf":0.005865102639296188}},")":{"docs":{"mutations.html":{"ref":"mutations.html","tf":0.003076923076923077}}}},"2":{"3":{"docs":{"mutations.html":{"ref":"mutations.html","tf":0.003076923076923077}},")":{"docs":{},",":{"docs":{"mutations.html":{"ref":"mutations.html","tf":0.003076923076923077}}}}},"docs":{}},"docs":{"getting-started.html":{"ref":"getting-started.html","tf":0.011764705882352941},"getters.html":{"ref":"getters.html","tf":0.005076142131979695},"mutations.html":{"ref":"mutations.html","tf":0.003076923076923077}},",":{"docs":{"getters.html":{"ref":"getters.html","tf":0.01015228426395939},"testing.html":{"ref":"testing.html","tf":0.0037243947858473}}},"s":{"docs":{},"t":{"docs":{"getters.html":{"ref":"getters.html","tf":0.00392156862745098}}}},")":{"docs":{"modules.html":{"ref":"modules.html","tf":0.0015037593984962407}}}},"2":{"docs":{"modules.html":{"ref":"modules.html","tf":0.0030075187969924814}},",":{"docs":{"getters.html":{"ref":"getters.html","tf":0.01015228426395939},"testing.html":{"ref":"testing.html","tf":0.0037243947858473}}},"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":{},":":{"docs":{"modules.html":{"ref":"modules.html","tf":0.0010683760683760685}}}}}},"docs":{}}},"5":{"docs":{},".":{"0":{"docs":{"api.html":{"ref":"api.html","tf":0.0025252525252525255}}},"docs":{}}},"docs":{}}},"3":{"docs":{"state.html":{"ref":"state.html","tf":0.0049504950495049506},"mutations.html":{"ref":"mutations.html","tf":0.003076923076923077}},"r":{"docs":{},"d":{"docs":{"modules.html":{"ref":"modules.html","tf":0.003205128205128205}}}},",":{"docs":{"testing.html":{"ref":"testing.html","tf":0.00186219739292365}}},".":{"0":{"docs":{"./":{"ref":"./","tf":0.037037037037037035}}},"docs":{}}},"4":{"docs":{},"t":{"docs":{},"h":{"docs":{"modules.html":{"ref":"modules.html","tf":0.002136752136752137}}}}},"6":{"docs":{"hot-reload.html":{"ref":"hot-reload.html","tf":0.009900990099009901}}},"docs":{},"a":{"docs":{},"c":{"docs":{},"t":{"docs":{},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{"./":{"ref":"./","tf":0.037037037037037035},"intro.html":{"ref":"intro.html","tf":0.010309278350515464},"core-concepts.html":{"ref":"core-concepts.html","tf":0.07692307692307693},"mutations.html":{"ref":"mutations.html","tf":0.00196078431372549},"actions.html":{"ref":"actions.html","tf":10.049853372434018},"modules.html":{"ref":"modules.html","tf":0.006015037593984963},"structure.html":{"ref":"structure.html","tf":0.02857142857142857},"forms.html":{"ref":"forms.html","tf":0.007246376811594203},"testing.html":{"ref":"testing.html","tf":0.01675977653631285},"hot-reload.html":{"ref":"hot-reload.html","tf":0.009900990099009901},"api.html":{"ref":"api.html","tf":0.015151515151515152}},"s":{"docs":{},",":{"docs":{"intro.html":{"ref":"intro.html","tf":0.006289308176100629},"modules.html":{"ref":"modules.html","tf":0.004273504273504274},"structure.html":{"ref":"structure.html","tf":0.008333333333333333},"testing.html":{"ref":"testing.html","tf":0.0016366612111292963}}},".":{"docs":{"mutations.html":{"ref":"mutations.html","tf":0.00196078431372549},"structure.html":{"ref":"structure.html","tf":0.008333333333333333},"testing.html":{"ref":"testing.html","tf":0.0016366612111292963},"api.html":{"ref":"api.html","tf":0.0016129032258064516}},"j":{"docs":{"structure.html":{"ref":"structure.html","tf":0.014285714285714285},"testing.html":{"ref":"testing.html","tf":0.00186219739292365}}},"s":{"docs":{},"p":{"docs":{},"e":{"docs":{},"c":{"docs":{},".":{"docs":{},"j":{"docs":{"testing.html":{"ref":"testing.html","tf":0.00186219739292365}}}}}}}}},":":{"docs":{"actions.html":{"ref":"actions.html","tf":0.020527859237536656},"modules.html":{"ref":"modules.html","tf":0.007518796992481203}}},"i":{"docs":{},"n":{"docs":{},"j":{"docs":{},"e":{"docs":{},"c":{"docs":{},"t":{"docs":{},"o":{"docs":{},"r":{"docs":{"testing.html":{"ref":"testing.html","tf":0.00186219739292365}},"(":{"docs":{},"{":{"docs":{"testing.html":{"ref":"testing.html","tf":0.00186219739292365}}}}}}}}}}}},"'":{"docs":{"api.html":{"ref":"api.html","tf":0.0016129032258064516}}},"?":{"docs":{},",":{"docs":{"api.html":{"ref":"api.html","tf":0.0025252525252525255}}}},",":{"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.008797653958944282}}},"b":{"docs":{"actions.html":{"ref":"actions.html","tf":0.005865102639296188}}},"(":{"docs":{},"{":{"docs":{"testing.html":{"ref":"testing.html","tf":0.00186219739292365}}}},".":{"docs":{"api.html":{"ref":"api.html","tf":0.0032258064516129032}}},"。":{"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}}}}}}}}},"u":{"docs":{},"a":{"docs":{},"l":{"docs":{"mutations.html":{"ref":"mutations.html","tf":0.0058823529411764705},"modules.html":{"ref":"modules.html","tf":0.0010683760683760685}}}}}},"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}}}},"p":{"docs":{},"t":{"docs":{"actions.html":{"ref":"actions.html","tf":0.002188183807439825},"modules.html":{"ref":"modules.html","tf":0.0010683760683760685},"plugins.html":{"ref":"plugins.html","tf":0.0026954177897574125},"hot-reload.html":{"ref":"hot-reload.html","tf":0.008264462809917356},"api.html":{"ref":"api.html","tf":0.0016129032258064516}}}}},"o":{"docs":{},"u":{"docs":{},"n":{"docs":{},"t":{"docs":{},":":{"docs":{"modules.html":{"ref":"modules.html","tf":0.0015037593984962407}}}}}}}},"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.005865102639296188},"structure.html":{"ref":"structure.html","tf":0.014285714285714285},"testing.html":{"ref":"testing.html","tf":0.0037243947858473},"hot-reload.html":{"ref":"hot-reload.html","tf":0.008264462809917356},"api.html":{"ref":"api.html","tf":5.002525252525253}},".":{"docs":{"hot-reload.html":{"ref":"hot-reload.html","tf":0.008264462809917356}},"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.003076923076923077}}}}}}}}}}}}}}}}}}}}},",":{"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.0049504950495049506},"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.029411764705882353},"getting-started.html":{"ref":"getting-started.html","tf":0.00975609756097561},"state.html":{"ref":"state.html","tf":0.0023584905660377358},"modules.html":{"ref":"modules.html","tf":0.002136752136752137},"structure.html":{"ref":"structure.html","tf":5.016666666666667}},"a":{"docs":{},"t":{"docs":{},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{},",":{"docs":{"intro.html":{"ref":"intro.html","tf":0.0031446540880503146}}},"s":{"docs":{},".":{"docs":{"intro.html":{"ref":"intro.html","tf":0.0031446540880503146},"getting-started.html":{"ref":"getting-started.html","tf":0.004878048780487805}}}},".":{"docs":{"state.html":{"ref":"state.html","tf":0.0023584905660377358}}},":":{"docs":{"mutations.html":{"ref":"mutations.html","tf":0.00196078431372549}}},"'":{"docs":{"modules.html":{"ref":"modules.html","tf":0.002136752136752137}}}}}}}}}}},":":{"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","tf":0.0010683760683760685}},"v":{"docs":{},"u":{"docs":{"structure.html":{"ref":"structure.html","tf":0.014285714285714285}}}}},",":{"docs":{"structure.html":{"ref":"structure.html","tf":0.008333333333333333}}},"r":{"docs":{},"o":{"docs":{},"a":{"docs":{},"c":{"docs":{},"h":{"docs":{"forms.html":{"ref":"forms.html","tf":0.007246376811594203}}}}}}}}},"b":{"docs":{},"o":{"docs":{},"v":{"docs":{"installation.html":{"ref":"installation.html","tf":0.011764705882352941},"mutations.html":{"ref":"mutations.html","tf":0.00196078431372549},"modules.html":{"ref":"modules.html","tf":0.0010683760683760685},"forms.html":{"ref":"forms.html","tf":0.007246376811594203},"testing.html":{"ref":"testing.html","tf":0.0016366612111292963}}},"u":{"docs":{},"t":{"docs":{},".":{"docs":{"mutations.html":{"ref":"mutations.html","tf":0.00196078431372549}}}}}},"r":{"docs":{},"a":{"docs":{},"m":{"docs":{},"o":{"docs":{},"v":{"docs":{"intro.html":{"ref":"intro.html","tf":0.010309278350515464}},",":{"docs":{"intro.html":{"ref":"intro.html","tf":0.0031446540880503146}}}}}}}},"s":{"docs":{},"t":{"docs":{},"r":{"docs":{},"a":{"docs":{},"c":{"docs":{},"t":{"docs":{"structure.html":{"ref":"structure.html","tf":0.008333333333333333},"testing.html":{"ref":"testing.html","tf":0.0016366612111292963}}}}}}}}},"d":{"docs":{"mutations.html":{"ref":"mutations.html","tf":0.00196078431372549}},"d":{"docs":{"installation.html":{"ref":"installation.html","tf":0.015873015873015872},"modules.html":{"ref":"modules.html","tf":0.003205128205128205},"hot-reload.html":{"ref":"hot-reload.html","tf":0.008264462809917356}},"i":{"docs":{},"t":{"docs":{"mutations.html":{"ref":"mutations.html","tf":0.00196078431372549},"plugins.html":{"ref":"plugins.html","tf":0.0026954177897574125},"testing.html":{"ref":"testing.html","tf":0.0016366612111292963}},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{},",":{"docs":{"intro.html":{"ref":"intro.html","tf":0.0031446540880503146},"getting-started.html":{"ref":"getting-started.html","tf":0.004878048780487805}}}}}}}},":":{"docs":{"mutations.html":{"ref":"mutations.html","tf":0.003076923076923077},"actions.html":{"ref":"actions.html","tf":0.002932551319648094}}}},"v":{"docs":{},"a":{"docs":{},"n":{"docs":{},"c":{"docs":{"intro.html":{"ref":"intro.html","tf":0.0031446540880503146}}},"t":{"docs":{},"a":{"docs":{},"g":{"docs":{"intro.html":{"ref":"intro.html","tf":0.0031446540880503146},"mutations.html":{"ref":"mutations.html","tf":0.00196078431372549}}}}}}}},"a":{"docs":{},"p":{"docs":{},"t":{"docs":{"modules.html":{"ref":"modules.html","tf":0.0010683760683760685}}}}},"m":{"docs":{},"i":{"docs":{},"t":{"docs":{},"t":{"docs":{},"e":{"docs":{},"d":{"docs":{},"l":{"docs":{},"y":{"docs":{},",":{"docs":{"forms.html":{"ref":"forms.html","tf":0.007246376811594203}}}}}}}}}}}},"l":{"docs":{},"w":{"docs":{},"a":{"docs":{},"y":{"docs":{"installation.html":{"ref":"installation.html","tf":0.011764705882352941},"api.html":{"ref":"api.html","tf":0.0016129032258064516}}}}},"t":{"docs":{},"h":{"docs":{},"o":{"docs":{},"u":{"docs":{},"g":{"docs":{},"h":{"docs":{"intro.html":{"ref":"intro.html","tf":0.0031446540880503146},"state.html":{"ref":"state.html","tf":0.0023584905660377358}}}}}}},"e":{"docs":{},"r":{"docs":{},"n":{"docs":{"mutations.html":{"ref":"mutations.html","tf":0.00196078431372549},"forms.html":{"ref":"forms.html","tf":0.007246376811594203}},"a":{"docs":{},"t":{"docs":{},"i":{"docs":{},"v":{"docs":{},"e":{"docs":{},"l":{"docs":{},"y":{"docs":{},",":{"docs":{"testing.html":{"ref":"testing.html","tf":0.0016366612111292963}}}}}}}}}}}}}},"l":{"docs":{},"o":{"docs":{},"w":{"docs":{"state.html":{"ref":"state.html","tf":0.0023584905660377358},"getters.html":{"ref":"getters.html","tf":0.00392156862745098},"mutations.html":{"ref":"mutations.html","tf":0.00392156862745098},"modules.html":{"ref":"modules.html","tf":0.002136752136752137},"plugins.html":{"ref":"plugins.html","tf":0.0026954177897574125},"testing.html":{"ref":"testing.html","tf":0.0016366612111292963},"api.html":{"ref":"api.html","tf":0.004838709677419355}}}}},"r":{"docs":{},"e":{"docs":{},"a":{"docs":{},"d":{"docs":{},"i":{"docs":{"modules.html":{"ref":"modules.html","tf":0.0010683760683760685}}}}}}},"s":{"docs":{},"o":{"docs":{},",":{"docs":{"modules.html":{"ref":"modules.html","tf":0.0010683760683760685}}}}}},"u":{"docs":{},"t":{"docs":{},"o":{"docs":{"plugins.html":{"ref":"plugins.html","tf":0.0026954177897574125}},"m":{"docs":{},"a":{"docs":{},"t":{"docs":{"modules.html":{"ref":"modules.html","tf":0.0010683760683760685}},"i":{"docs":{},"c":{"docs":{},"a":{"docs":{},"l":{"docs":{},"l":{"docs":{},"y":{"docs":{},":":{"docs":{"installation.html":{"ref":"installation.html","tf":0.011764705882352941}}},".":{"docs":{"mutations.html":{"ref":"mutations.html","tf":0.00196078431372549}}}}}}}}}}}}},"h":{"docs":{},"o":{"docs":{},"r":{"docs":{"intro.html":{"ref":"intro.html","tf":0.0031446540880503146}}}}}}},"r":{"docs":{},"c":{"docs":{},"h":{"docs":{},"i":{"docs":{},"t":{"docs":{},"e":{"docs":{},"c":{"docs":{},"t":{"docs":{},"u":{"docs":{},"r":{"docs":{},"e":{"docs":{},".":{"docs":{"intro.html":{"ref":"intro.html","tf":0.0031446540880503146}}},"。":{"docs":{},"与":{"docs":{},"其":{"docs":{},"他":{"docs":{},"模":{"docs":{},"式":{"docs":{},"不":{"docs":{},"同":{"docs":{},"的":{"docs":{},"是":{"docs":{},",":{"docs":{},"v":{"docs":{},"u":{"docs":{},"e":{"docs":{},"x":{"docs":{"intro.html":{"ref":"intro.html","tf":0.010309278350515464}}}}}}}}}}}}}}}}}}}}}}}}}}},"r":{"docs":{},"a":{"docs":{},"y":{"docs":{"state.html":{"ref":"state.html","tf":0.0023584905660377358},"getters.html":{"ref":"getters.html","tf":0.00392156862745098},"api.html":{"ref":"api.html","tf":0.012626262626262626}},")":{"docs":{"api.html":{"ref":"api.html","tf":0.0025252525252525255}}},",":{"docs":{"api.html":{"ref":"api.html","tf":0.0025252525252525255}}}}},"o":{"docs":{},"w":{"docs":{"state.html":{"ref":"state.html","tf":0.0023584905660377358}}}}},"g":{"docs":{},"u":{"docs":{},"m":{"docs":{},"e":{"docs":{},"n":{"docs":{},"t":{"docs":{"getters.html":{"ref":"getters.html","tf":0.00392156862745098},"mutations.html":{"ref":"mutations.html","tf":0.00196078431372549},"actions.html":{"ref":"actions.html","tf":0.002188183807439825},"modules.html":{"ref":"modules.html","tf":0.005341880341880342},"testing.html":{"ref":"testing.html","tf":0.0016366612111292963},"api.html":{"ref":"api.html","tf":0.012903225806451613}},":":{"docs":{"getters.html":{"ref":"getters.html","tf":0.00784313725490196},"mutations.html":{"ref":"mutations.html","tf":0.00196078431372549},"modules.html":{"ref":"modules.html","tf":0.0010683760683760685},"plugins.html":{"ref":"plugins.html","tf":0.0026954177897574125}}},"s":{"docs":{},".":{"docs":{"testing.html":{"ref":"testing.html","tf":0.0016366612111292963}}},":":{"docs":{"api.html":{"ref":"api.html","tf":0.004838709677419355}}}},",":{"docs":{"api.html":{"ref":"api.html","tf":0.0016129032258064516}}},".":{"docs":{"api.html":{"ref":"api.html","tf":0.0016129032258064516}}}}}}}},"s":{"docs":{},",":{"docs":{"testing.html":{"ref":"testing.html","tf":0.00186219739292365}}}}},"b":{"docs":{},"i":{"docs":{},"t":{"docs":{},"r":{"docs":{},"a":{"docs":{},"r":{"docs":{},"i":{"docs":{"actions.html":{"ref":"actions.html","tf":0.002188183807439825}}}}}}}}}},"g":{"docs":{},"a":{"docs":{},"i":{"docs":{},"n":{"docs":{},",":{"docs":{"getting-started.html":{"ref":"getting-started.html","tf":0.004878048780487805}}}}}}},"s":{"docs":{},"s":{"docs":{},"o":{"docs":{},"c":{"docs":{},"i":{"docs":{"state.html":{"ref":"state.html","tf":0.0023584905660377358}}}}},"u":{"docs":{},"m":{"docs":{"actions.html":{"ref":"actions.html","tf":0.002188183807439825},"forms.html":{"ref":"forms.html","tf":0.007246376811594203}}}},"e":{"docs":{},"t":{"docs":{"modules.html":{"ref":"modules.html","tf":0.003205128205128205}},"s":{"docs":{},")":{"docs":{"modules.html":{"ref":"modules.html","tf":0.0030075187969924814}},"时":{"docs":{},"不":{"docs":{},"需":{"docs":{},"要":{"docs":{},"在":{"docs":{},"同":{"docs":{},"一":{"docs":{},"模":{"docs":{},"块":{"docs":{},"内":{"docs":{},"额":{"docs":{},"外":{"docs":{},"添":{"docs":{},"加":{"docs":{},"空":{"docs":{},"间":{"docs":{},"名":{"docs":{},"前":{"docs":{},"缀":{"docs":{},"。":{"docs":{},"更":{"docs":{},"改":{"docs":{"modules.html":{"ref":"modules.html","tf":0.0015037593984962407}}}}}}}}}}}}}}}}}}}}}}}}}}},"m":{"docs":{},"b":{"docs":{},"l":{"docs":{"structure.html":{"ref":"structure.html","tf":0.008333333333333333}}}}},"r":{"docs":{},"t":{"docs":{"testing.html":{"ref":"testing.html","tf":0.0032733224222585926}}}}},"i":{"docs":{},"g":{"docs":{},"n":{"docs":{"testing.html":{"ref":"testing.html","tf":0.0016366612111292963}}}}}},"y":{"docs":{},"n":{"docs":{},"c":{"docs":{"mutations.html":{"ref":"mutations.html","tf":0.00196078431372549},"actions.html":{"ref":"actions.html","tf":0.008797653958944282},"testing.html":{"ref":"testing.html","tf":0.0016366612111292963}},"h":{"docs":{},"r":{"docs":{},"o":{"docs":{},"n":{"docs":{"mutations.html":{"ref":"mutations.html","tf":0.0058823529411764705},"actions.html":{"ref":"actions.html","tf":0.006564551422319475},"structure.html":{"ref":"structure.html","tf":0.008333333333333333}},"o":{"docs":{},"u":{"docs":{},"s":{"docs":{},",":{"docs":{"actions.html":{"ref":"actions.html","tf":0.002188183807439825}}}}}}}}}}}}}},"v":{"docs":{},"a":{"docs":{},"i":{"docs":{},"l":{"docs":{"state.html":{"ref":"state.html","tf":0.0023584905660377358}}}}},"o":{"docs":{},"i":{"docs":{},"d":{"docs":{"modules.html":{"ref":"modules.html","tf":0.0010683760683760685},"strict.html":{"ref":"strict.html","tf":0.01098901098901099}}}}}},"m":{"docs":{},"o":{"docs":{},"u":{"docs":{},"n":{"docs":{},"t":{"docs":{"strict.html":{"ref":"strict.html","tf":0.01098901098901099}},")":{"docs":{},"`":{"docs":{"mutations.html":{"ref":"mutations.html","tf":0.003076923076923077},"actions.html":{"ref":"actions.html","tf":0.002932551319648094}}}},":":{"docs":{"mutations.html":{"ref":"mutations.html","tf":0.006153846153846154},"actions.html":{"ref":"actions.html","tf":0.005865102639296188}}}}}}}},"n":{"docs":{},"o":{"docs":{},"t":{"docs":{},"h":{"docs":{"actions.html":{"ref":"actions.html","tf":0.002188183807439825}}}}},"y":{"docs":{},",":{"docs":{"api.html":{"ref":"api.html","tf":0.005050505050505051}}}}},"w":{"docs":{},"a":{"docs":{},"i":{"docs":{},"t":{"docs":{"actions.html":{"ref":"actions.html","tf":0.008797653958944282}},",":{"docs":{"actions.html":{"ref":"actions.html","tf":0.002188183807439825}}},",":{"docs":{},"我":{"docs":{},"们":{"docs":{},"可":{"docs":{},"以":{"docs":{},"如":{"docs":{},"下":{"docs":{},"组":{"docs":{},"合":{"docs":{"actions.html":{"ref":"actions.html","tf":0.002932551319648094}}}}}}}}}}}}}}},":":{"docs":{"modules.html":{"ref":"modules.html","tf":0.006015037593984963},"hot-reload.html":{"ref":"hot-reload.html","tf":0.019801980198019802}}},"f":{"docs":{},"f":{"docs":{},"e":{"docs":{},"c":{"docs":{},"t":{"docs":{"modules.html":{"ref":"modules.html","tf":0.002136752136752137}}}}}}},"t":{"docs":{},".":{"docs":{"modules.html":{"ref":"modules.html","tf":0.0010683760683760685}}},"t":{"docs":{},"a":{"docs":{},"c":{"docs":{},"h":{"docs":{"modules.html":{"ref":"modules.html","tf":0.002136752136752137},"api.html":{"ref":"api.html","tf":0.0016129032258064516}}}}},"e":{"docs":{},"m":{"docs":{},"p":{"docs":{},"t":{"docs":{"forms.html":{"ref":"forms.html","tf":0.007246376811594203}}}}}}}}},"c":{"docs":{},"o":{"docs":{},"n":{"docs":{},"c":{"docs":{},"e":{"docs":{},"p":{"docs":{},"t":{"docs":{"./":{"ref":"./","tf":0.029411764705882353},"intro.html":{"ref":"intro.html","tf":0.009433962264150943},"getting-started.html":{"ref":"getting-started.html","tf":0.004878048780487805},"core-concepts.html":{"ref":"core-concepts.html","tf":5.15}},"s":{"docs":{},".":{"docs":{"mutations.html":{"ref":"mutations.html","tf":0.00196078431372549}}}}}}}},"f":{"docs":{},"i":{"docs":{},"g":{"docs":{"intro.html":{"ref":"intro.html","tf":0.0031446540880503146},"testing.html":{"ref":"testing.html","tf":0.0032733224222585926}},".":{"docs":{"testing.html":{"ref":"testing.html","tf":0.0016366612111292963}}}}},"l":{"docs":{},"i":{"docs":{},"c":{"docs":{},"t":{"docs":{"state.html":{"ref":"state.html","tf":0.0023584905660377358}}}}}}},"t":{"docs":{},"a":{"docs":{},"i":{"docs":{},"n":{"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},"mutations.html":{"ref":"mutations.html","tf":0.00196078431372549},"actions.html":{"ref":"actions.html","tf":0.002188183807439825},"modules.html":{"ref":"module