1***@qq.com
1***@qq.com
  • 发布:2022-02-14 19:48
  • 更新:2022-05-23 19:12
  • 阅读:1105

关于在ssr中使用unicloud-db获取到的数据会发生混乱的问题?

分类:uniCloud

如附件中的图所示,我的一个项目当中在两处使用到了unicloud-db,但是发现第一处使用到的unicloud-db获取的数据出现了问题。经过不断测试发现网页刚加载时,第一处使用到的unicloud-db所应该返回正确的数据会瞬时出现,但是很快就变成了第二处unicloud-db返回的数据,所以两处都是返回的最后一个unicloud-db所返回的数据,偶尔第一处unicloud-db能够正常返回正确的数据,但在很多次测试中大多数返回的数据都是同第二处使用unicloud-db返回的数据相同。导致了第一处部分在网页中丢失正确的数据而无法渲染,想请问下官方人员这是什么原因?望能够得到帮助,谢谢。项目可以通过公网访问,地址为:sunshine.mefan.cc。

2022-02-14 19:48 负责人:DCloud_uni-ad_HDX 分享
已邀请:
DCloud_uniCloud_WYQ

DCloud_uniCloud_WYQ

在你发的这个网站上具体描述下再具体的描述下

  • 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

DCloud_uniCloud_WYQ

DCloud_uniCloud_WYQ

方便整理个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

1***@qq.com (作者)

这张图是在本地和网站的静态资源下通过unicloud-db获取到的数据

1***@qq.com

1***@qq.com (作者)

这张图是在网站unicloud-db获取到的数据,这个数据和网站的新闻板块使用到的unicloud-db获取到的数据是一样的

1***@qq.com

1***@qq.com (作者)

检查网站的源代码发现服务器端获取到的是正确的数据,但是到了客户端上时就会变成新闻处的数据

1***@qq.com

1***@qq.com (作者)

希望官方能够修复下这个问题,代码片段的截图是我的处理方式:

DCloud_uni-ad_HDX

DCloud_uni-ad_HDX

已修复,组件增加了 ssr-key 配置,需要开发者传入,要保证整个应用唯一,下次发版生效

DCloud_uni-ad_HDX

DCloud_uni-ad_HDX

3.4.11 已修复

该问题目前已经被锁定, 无法添加新回复