在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
前言: 提到状态管理大家可能马上就想到: 1、什么是前端状态管理?举个例子:图书馆里所有人都可以随意进书库借书还书,如果人数不多,这种方式可以提高效率减少流程,一旦人数多起来就容易混乱,书的走向不明确,甚至丢失。所以需要一个图书管理员来专门记录借书的记录,也就是你要委托图书管理员给你借书及还书。 实际上,大多数状态管理方案都是如上思想,通过管理员(比如 Vuex)去规范书库里书本的借还(项目中需要存储的数据) 2、Vuex在国内业务使用中 const state = { book: 0 } const mutations = { borrow_book(state) { state.book ++ } } //调用时 store.commit('borrow_book') 那还有 其实我只是拿 Vuex 来浅入一下相关用法大家应该是都熟悉了,那 Vuex 解决了什么问题呢?
实际上大部分程序员都比较懒(狗头保命),只是为了能多个组件共享状态,至于其他的都是事后了。最典型的就是加入购物车的数量,加入一个就通过 Vuex 记录保存最终的总数显示在下栏。 那问题来了,既然你的目的只是共享多个状态,那何不直接用 3、Bus 总线
实际上 Bus 总线十分轻便,他并不存在 Vue.prototype.$Bus = new Vue() 然后,你可以通过 // 发送事件 this.$Bus.$emit('borrow_book', 1) // 任意组件中接收 this.$Bus.$on('borrow_book', (book) => { console.log(`借了${book}本书`) }) 当然还有 怎么样?上面对于满足共享一个状态是不是比 Vuex 要简单多了?实际上确实是简单多了,但这也代表他比较适合中小型项目。多于大型项目来说 他的工作原理就是发布订阅者的思想,虽然非常优雅简单,但实际 class Bus { constructor() { // 收集订阅信息,调度中心 this.list = {}; } // 订阅 $on(name, fn) { this.list[name] = this.list[name] || []; this.list[name].push(fn); } // 发布 $emit(name, data) { if (this.list[name]) { this.list[name].forEach((fn) => { fn(data); }); } } // 取消订阅 $off(name) { if (this.list[name]) { delete this.list[name]; } } } export default Bus; 简单吧?你只需要跟用 4、web storage其实说到这,
无论这三种的哪种都强烈建议不要将敏感信息放入其中,这里应该是加密或一些不那么重要的数据在里面。 先简单复习一下三者: cookie 不必多说,大家发起请求时经常会携带cokie 请求一些个人数据等,与我们要探讨的内容没有太大关系。
总结: 不论哪种方案选择合适自己项目的方案才是最佳实践。没有最好的方案,只有合适自己的方案。 到此这篇关于前端的状态管理的文章就介绍到这了,更多相关前端的状态管理内容请搜索极客世界以前的文章或继续浏览下面的相关文章希望大家以后多多支持极客世界! |
请发表评论