Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/364.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vue.js/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 何时再次通过Vuex从API获取数据以保持数据最新_Javascript_Vue.js_Vuex - Fatal编程技术网

Javascript 何时再次通过Vuex从API获取数据以保持数据最新

Javascript 何时再次通过Vuex从API获取数据以保持数据最新,javascript,vue.js,vuex,Javascript,Vue.js,Vuex,我正在从API获取数据,并希望通过Vuex实现它。因此,我的用户存储模块保存和管理所有用户 要获取所有用户,我有一个fetch操作,该操作通过Axios调用API,并将用户数组从响应传递给变异 我在/users中有一个视图组件,用于呈现用户列表。在这个组件中,我称之为 async mounted() { await this.fetch(); } 初始化存储。之后,存储getter将返回users数组,并呈现列表。我知道我也可以通过getter通过id获取一个项目 getById:stat

我正在从API获取数据,并希望通过Vuex实现它。因此,我的用户存储模块保存和管理所有用户

要获取所有用户,我有一个
fetch
操作,该操作通过Axios调用API,并将用户数组从响应传递给变异

我在
/users
中有一个视图组件,用于呈现用户列表。在这个组件中,我称之为

async mounted() {
  await this.fetch();
}
初始化存储。之后,存储getter将返回users数组,并呈现列表。我知道我也可以通过getter通过id获取一个项目

getById:state=>id=>state.users.find(user=>user.id==id)

当导航到用户详细信息页面时,
/users/:id
我可以利用它,通过
this.$router.currentRoute.params.id
提取用户id并呈现用户详细信息。但是如果我直接装那条路线呢?然后,应用空用户数组初始化存储,它将找不到单个用户

那么,我应该在用户详细信息视图的
挂载的
钩子中再次获取所有用户吗?我认为直接调用axios服务是一种反模式,因为参考资料中说我应该使用Vuex作为组件和API之间的接口

从api获取所有用户时是否有最佳实践?因为让我们想象一下,您导航到另一个页面,该页面将加载select组件中的所有用户,所以我应该从getter获取它们吗?也许它会加载一个不再存在的用户。但是每X秒轮询一次所有用户也不好


更新存储数据以使其可供整个应用程序中的所有组件访问的正确方法是什么?

我不同意使用Vuex以您描述的方式存储整个用户数据表。这听起来像是一个安全问题。请记住,Vuex是一个客户端商店;这意味着使用您的应用程序的任何客户端都可以看到您的所有用户数据。您应该永远不要在客户端存储敏感数据

在你的浏览器控制台中输入这个,你就会明白我的意思了

document.getElementsByTagName('a')[0]。\uuuu vue\uuuuu.$store.state
Vuex应用于存储驱动会话所需的单个用户的非敏感数据

如果为了列出帐户而存储所有用户数据,以便管理员或其他人可以管理这些帐户,那么我会在加载列出用户帐户的任何视图时按需调用API。这样,您将始终拥有最新的数据,而无需不断轮询API

我将对数据进行分页,只加载前5条记录(以保持API调用最初的轻量级),然后为管理员提供搜索帐户的能力;搜索应该通过您的API在服务器端完成

例如:

方法:{
获取用户(限制、页面、搜索){
常数thisIns=此;
如果(搜索){
this.userQuery=`/users/find?search=${search}`
}否则{
this.userQuery=`/users/find?limit=${limit}&page=${page}`
}
thisIns.$http.get(this.userQuery)
。然后(异步(响应)=>{
console.log(response.data)
})
.catch(函数(错误){
console.log(错误)
});
}
},
创建(){
这个.fetchUsers(5,1)
},
然后,您可以根据需要调用
fetchUsers()
方法,例如在执行用户搜索时

由于使用AXIOS,还可以考虑实现缓存机制,以便在您定义的某个时间段内缓存API调用。这将减少命中服务器的API调用数


我也不认为这是可伸缩的。请记住,应用程序用户在首次加载应用程序时必须等待此负载。这也会影响绩效;随着用户数据的增长,您将消耗越来越多的设备RAM。

如果
用户
数据在整个应用程序中对您非常重要,您应该通过轮询直接获取(或者您可以使用套接字)。如果我处于这种情况,我会使用轮询或套接字。因为没有其他解决办法。谢谢你的回复。这听起来有点乱。我想储存所有东西。我不希望每次都获取一些数据并缓存一些数据:/Vuex是否有一些存储限制?Vuex本身没有限制;客户端浏览器和设备在内存(ram)和本地存储(磁盘)方面存在限制。我认为,以直接影响用户设备或应用程序性能的方式构建应用程序是不好的做法。我认为应该保持应用程序和后端的明显分离。通过API,应用程序应该只是数据的接口。这意味着您可以创建轻量级、高性能的应用程序,这些应用程序在将来很容易更改/迁移。只要我的两分钱。祝你好运如果我没有记错的话,如果我将配置文件映像为数兆字节的用户对象存储到Vuex存储中,我会遇到真正的麻烦?那么我应该直接调用服务函数,并将Vuex留在这里。我的意思是,我不会存储整个表的数据。在Vuex中为登录用户存储配置文件映像的URL完全可以。在我的例子中,当我第一次对用户进行身份验证(这是对我的一个API的调用)时,我返回该用户的“identity”对象。它包含任何我需要驱动该用户会话的内容;比如他们的显示名称、个人资料图片的URL,以及他们可能选择的任何应用程序设置(例如:暗模式)。