【发布时间】:2017-05-14 06:36:24
【问题描述】:
当我设置strict: true 时出现错误:
vue.js:525 [Vue warn]: Error in watcher "state"
(found in root instance)
warn @ vue.js:525
run @ vue.js:1752
update @ vue.js:1720
notify @ vue.js:584
reactiveSetter @ vue.js:814
Transform.resize @ transform.js:169
e.resize @ map.js:343
e._onWindowResize @ map.js:1204
vue.js:1756 Uncaught Error: [vuex] Do not mutate vuex store state outside mutation handlers.
at assert (vuex.js:182)
at Vue$3.store._vm.$watch.deep (vuex.js:714)
at Watcher.run (vue.js:1746)
at Watcher.update (vue.js:1720)
at Dep.notify (vue.js:584)
at Transform.reactiveSetter [as width] (vue.js:814)
at Transform.resize (transform.js:169)
at e.resize (map.js:343)
at e._onWindowResize (map.js:1204)
当我设置strict: false 或完全不使用该行时,它工作正常。建议在严格模式下工作:我该怎么做才能避免错误?因为我不认为我在我的代码中改变了突变处理程序之外的商店!?
查看this fiddle 中的行为。
【问题讨论】:
-
你不应该尝试将整个地图保存到 vuex 商店,因为每次交互时,mapbox 都会改变它
-
@Nora Than 如何跨组件使用映射变量并从 vuex 提供的功能中受益?
-
Imo 最好将通用功能提取到单独的模块/服务中,并在需要时导入组件。据我了解,Vuex store 应该用于管理应用程序状态,而不是用于存储全局变量/对象。
-
@Nora 所以我的理解是:由于地图将通过 dom 与鼠标、缩放等进行交互。它始终是一个全局变量,因此将其存储在 vuex 中并不是最佳实践。我想地图不能成为本地对象?
-
Imo,地图本身应该是一个组件,不需要任何全局变量。它可以通过 props 和/或通过设置/获取 vuex 存储中的状态与其他组件进行通信。
标签: vue.js vue-component vuex