当前位置: 首页 > 科技观察

预填充Vue.js全局存储状态的三种方法

时间:2023-03-20 12:15:38 科技观察

【.com快译】在构建Vue.js应用程序并将程序切割到一定规模时,可能需要进行全局状态管理。方便的是,核心开发团队提供了Vuex,它是Vue.js应用程序的实际状态管理库。VUE入门并不难,前提是您已经熟悉Vuex的实现。毕竟这篇文章不是关于新手的。如果您需要它,那么我建议您查看文档。使用Vuex可以更轻松地管理全局数据存储,对于以下示例,假设一个存储如下所示:user:null},mutations:{setUser(state,user){state.user=user}},})存储区的状态从一个空的用户对象开始,setUser可以更新状态。然后在我们的应用程序中,显示用户详细信息:所以当应用加载时,如果用户已登录,显示“您好,用户名,欢迎回来!”给用户的消息。否则,提示用户登录,这是一个微不足道的例子。但是,问题来了,如果有几个选项,怎么解决呢?设置初始状态以预填充全局存储的最简单方法是在创建存储时设置初始状态:user:{name:"Austin"}},mutations:{setUser(user){state.user=user}}})显然,如果您提前知道有关用户的详细信息,这就可以了。我们在构建应用程序时可能不知道用户名,但还有另一种选择。我们可能会利用本地存储来保留用户信息的副本。当他们登录时,在本地存储中设置详细信息,当他们注销时,从本地存储中删除详细信息。当应用程序加载时,您可以将用户详细信息从本地存储初始状态拉入初始状态:get('user')},mutations:{setUser(user){state.user=user}}})如果您使用的数据不需要非常严格的安全限制,这是可以实现的。我建议使用vuex-persistedstate库来帮助实现自动化。请注意,切勿将非常敏感的数据(例如身份验证令牌)存储在本地存储中,因为它可能容易受到XSS攻击。所以上面的例子适用于用户名,但不适用于auth令牌(它仍然可以是Vuex,只是不持久化)。安装应用程序时请求数据现在假定数据未存储在本地存储中。我们的下一步行动可能是将初始状态留空并允许应用程序挂载。安装应用程序后,我们可以向服务器发出一些HTTP请求以获取数据,然后更新全局状态:但是,现在出现了奇怪的用户体验。该应用程序将加载并发送请求,但当用户等待请求返回时,他们会看到“您可能应该已登录”。当请求返回时,假设会话已登录,消息会快速更改为“嗨{{user.name}},欢迎回来!”。这看起来会很奇怪。要解决此问题,我们只需在发出请求时显示加载元素:记住,这是一个非常简单的例子。在您的应用程序中,您可能有一个专门用于加载动画的组件,并且您可能有一个组件来替换此处的用户消息。还可以选择从Vuex操作发出HTTP请求,这个概念仍然适用。在加载应用程序主机之前请求数据最后一个示例是发出与上一个类似的HTTP请求,但在应用程序加载之前,等待请求返回并更新商店。Vuex存储只是一个具有一些属性和方法的对象,可以像对待任何其他JavaScript对象一样对待它。将我们的商店导入main.js文件(或任何应用程序的入口点)并在安装应用程序之前调用HTTP请求:importVuefrom"vue"importstorefrom"./store"importAppfrom"./App.vue"fetch('/user').then(r=>r.json()).then((user)=>{store.commit('setUser',user)newVue({store,render:(h)=>h(App),}).$mount("#app")}).catch((error)=>{//Don'tforgettohandlethis})在应用程序加载之前将需要从API获取的任何数据预加载到全局存储中。这种方法避免了前面提到的卡顿跳转或管理某些加载逻辑的问题。但是,有一个重要的警告。不要担心在HTTP请求挂起时显示加载微调器,同时您的应用程序中没有显示任何内容。如果应用程序是单页应用程序,则用户可能会盯着空白页面直到请求返回。所以它并没有真正解决延迟问题,它只是决定在等待数据时显示什么样的UI体验。结语关于以上方法,并没有说哪个更好。事实上,这三种方法都可以使用,具体取决于要获取的数据和应用程序的需要。还值得一提的是,获取请求不会使用Vuex变体直接提交到存储。您还可以使用Vuex操作来实现获取请求。您还可以将这些相同的原则应用于任何其他状态管理工具,例如Vue.observable。【翻译稿件,合作网站转载请注明原译者和出处.com】