【发布时间】:2021-04-30 08:19:34
【问题描述】:
背景
使用 Gatsby/React 创建展示图片和视频的作品集页面。我已将媒体源存储在一个数组中,然后遍历该数组以创建一个网格。
问题
网格中的视频缩略图出现重复。第二个视频正在获取第一个视频的缩略图:
视频对象的创建如下:
<VideoContainer key={`vid-${section}-${itemCounter}`}>
<video className="proj-video" preload="metadata">
<source src={currImg.src} type={`videomp4`} />
</video>
<div className="btn-container">
<FontAwesomeIcon color="white" size="4x" icon="play" />
</div>
</VideoContainer>
<VideoContainer /> 是一个样式化的 div。
它发生在多个视频上。到目前为止我尝试过的:
- 确保这些视频的来源不同。播放视频时(通过单击缩略图上方的播放按钮),将播放正确的视频。
- 也在
video标签上添加key属性。但是,这并不能解决问题。
注意:这是一种非常不确定的行为,因为它并不总是发生。有时,它会在页面刷新时得到纠正,有时则不会。
编辑
您可以看到我没有从其他来源设置缩略图。它只显示视频帧。我在视频 URL 的末尾附加 "#t=10"(任何数字),并在视频标签上添加 preload="metadata" 以加载当时的帧。
【问题讨论】:
-
这听起来可能是补液失败。确保您没有做任何会导致您的初始客户端渲染生成的标记与您的静态、服务器端渲染标记不匹配的事情。
-
@coreyward 我会调查的。我不知道水合作用问题,所以我会研究它并稍后更新。谢谢。
-
@coreyward 我做了一些研究,我可以想象这是一次补液失败。但是,我无法在代码中跟踪它(没有这样的代码导致不同的服务器端渲染)。另外,在我的开发模式下,我没有得到任何这样的warning。虽然按照下面的答案更改密钥已经解决了这个问题,但我认为这不是问题(同样,没有重复密钥的警告)。你能谈谈这个吗?
-
我知道不看代码就很难说什么。不幸的是,我无法共享代码。如果您从经验中想到任何常见问题,请告诉我!再次感谢:)
-
Gatsby 不会显示水合不匹配的警告,因为它在开发中呈现客户端,并且不支持使用 React 的开发模式进行构建。
标签: javascript html reactjs html5-video gatsby