如附件中的图所示,我的一个项目当中在两处使用到了unicloud-db,但是发现第一处使用到的unicloud-db获取的数据出现了问题。经过不断测试发现网页刚加载时,第一处使用到的unicloud-db所应该返回正确的数据会瞬时出现,但是很快就变成了第二处unicloud-db返回的数据,所以两处都是返回的最后一个unicloud-db所返回的数据,偶尔第一处unicloud-db能够正常返回正确的数据,但在很多次测试中大多数返回的数据都是同第二处使用unicloud-db返回的数据相同。导致了第一处部分在网页中丢失正确的数据而无法渲染,想请问下官方人员这是什么原因?望能够得到帮助,谢谢。项目可以通过公网访问,地址为:sunshine.mefan.cc。
- 发布:2022-02-14 19:48
- 更新:2022-05-23 19:12
- 阅读:1119
方便整理个demo出来吗?本地运行ssr的话有这个问题吗
-
1***@qq.com (作者)
本地运行没有这个问题,我尝试修复了一下,发现在服务器端渲染时,window[UNI_SSR]对于每一个unicloud-db都是都是使用了同一个key(通过文档我了解到这是默认生成的,文件+函数位置做base64生成key,所以涉及到多个unicloud-db的使用时会导致服务器端只能够保存同一个key),这导致了在服务器端请求时,window[UNI_SSR]中的key只能保存所有unicloud-db中请求最慢的数据,从而对客户端是否需要进行重新请求产生了影响,同时数据在客户端渲染也会发生问题
2022-02-18 11:52
-
1***@qq.com (作者)
我做了一个不太优雅的处理方法,给组件的props添加了一个ssrId,在代码中每一个使用到unicloud-db组件的地方,对这个ssrId进行传值,然后对unicloud-db的源代码进行修改,让ssrRef()函数执行时不再使用默认生成的key了,而是使用组件传入的ssrId的值做base64的编码,然后把编码后的值作为ssrRef()的key参数,这样保证了无论是在服务器端还是客户端,只要使用了多个unicloud-db进行多个不同表的数据获取,能够使得服务器端渲染时window[UNI_SSR]能够在全局通过组件使用时传入的ssrId来作为key,保存对应unicloud-db请求到的数据
2022-02-18 12:00
1***@qq.com (作者)
我已经重新上传了,banner处使用的uncloud-db在本地和网站的静态资源下通过unicloud-db获取到的数据是正确的,但是使用ssr上传后的网站banner处获取到的数据同下面新闻处的数据
2022-02-16 14:49
1***@qq.com (作者)
两个unicloud-db一个是获取banner表的数据,另一个获取的是新闻表的数据,但是前面banner的unicloud-db在使用ssr上传后,数据却获取到的是新闻表的数据
2022-02-16 14:52