详解vuex 中的 state 在组件中如何监听
前言
不知道大家有没有遇到过这样一种情况? vuex中的state会在某一个组建中使用,而这个状态的初始化是通过异步加载完成的。组件在渲染过程中,获取的state状态为空。也就是说组件在异步完成之前就已经完成渲染了,导致组件的数据没有来得及渲染。
问题举例
举例说明如下:
// topo.vue created() { this.getuserandsysicons(); }, methods: { getuserandsysicons() { const self = this; // 用户图标 iconapi.getusericons().then(response => { self.$store.dispatch('setusericons', response.data); }); } }
在topo.vue中created或者mounted完成的时候调用 getuserandsysicons() 异步初始化usericons,方便在其他组件中使用这个数据。
// modifyhost.vue mounted() { this.usericons = this.$store.state.topo.usericons; // 用户图标 }
在modifyhost.vue中渲染数据是,需要使用usericons。在modifyhost.vue组件mounted完成的时候,usericons数据还没有被初始化。导致modifyhost.vue渲染为空。
思考
想的是,当topo.vue中异步获取usericons完成的时候,再去将modifyhost.vue组件中的usericons初始化。这样就会自动改变完成渲染。那么怎么知道异步什么时候完成呢?
于是就想到了vue一个好东西watch监听,监听某一个数据的变化。我们都知道是,很容易监听组件中局部数据的变化。那么,这里怎么去监听state中的变化呢?于是有利用了computed计算属性。具体操作如下:
解决
在computed中写一个计算属性getusericons,返回状态管理中的usericons。然后在watch中监听这个计算属性的变化,对modifyhost.vue中的usericons重新赋值。
computed: { getusericons() { return this.$store.state.topo.usericons; } }, watch: { getusericons(val) { this.usericons = val; } }
最终效果
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
上一篇: python实现点对点聊天程序
下一篇: 黑枸杞和酒能一起喝吗,今天来看看吧
推荐阅读
-
父组件中vuex方法更新state子组件不能及时更新并渲染的完美解决方法
-
详解vuex 中的 state 在组件中如何监听
-
详解在Angularjs中ui-sref和$state.go如何传递参数
-
详解vuex中action何时完成以及如何正确调用dispatch的思考
-
详解在React中跨组件分发状态的三种方法
-
详解在WebStorm中添加Vue.js单文件组件的高亮及语法支持
-
详解在ASP.NET Core中如何编写合格的中间件
-
在React中如何优雅的处理事件响应详解
-
父组件中vuex方法更新state,子组件不能及时更新并渲染的解决方法
-
vue开发中,父组件添加scoped之后 如何解决在父组件中无法修改子组件样式的问题?