javascript - 在 NextJS/React 中加载 Skeleton 实现

标签 javascript reactjs typescript next.js

我从 Amazon S3 存储桶中获取一组视频链接,并将它们映射到名为 HoverVideoPlayer 的视频播放器组件中:

 {data?.slice(0, 10).map((item: any) => (
      <div key={item.id}>
        {data ? (
          <HoverVideoPlayer videoSrc={item.videoLink} />
        ) : (
          <Skeleton count={10} />
        )}
      </div>
    ))}

这会导致加载体验,其中多个图像/视频在 Tailwind 网格组件内按比例放大,直到完全加载,从而扭曲布局:

enter image description here

为了将这种加载改进为 YouTube 上使用的更精致的内容,我实现了“React Loading Skeleton”,以努力拥有一个固定大小的预加载器,该预加载器会占用网格列的空间,直到视频完全加载加载并缩放以防止布局跳转。

enter image description here

这是我第十次以上尝试实现加载骨架并使其在加载/扩展期间显示。我调整了骨架的高度和宽度,将组件放在播放器的上方和下方,将导入调整到精确的数据获取位置:

            <HoverVideoPlayer
                  videoSrc={item.videoLink || <Skeleton count={10} />}
                />

但没有成功,甚至连装载骷髅的影子都没有出现。我做错了什么?

https://codesandbox.io/p/sandbox/happy-antonelli-dt1enq?file=%2Fpages%2Findex.tsx

最佳答案

据我了解,您希望在获取数据时显示骨架?

我认为这样的事情应该有效:

<main className={styles.main}>
   {!data?.length && new Array(10).fill().map(() => <Skeleton count={10} />)}}
   {data?.slice(0, 10).map((item: any) => (
      <div key={item.id}>
         <HoverVideoPlayer videoSrc={item.videoLink}  />
      </div>
    ))}
</main>

并且不要忘记导入骨架的样式:

导入'react-loading-sketch/dist/sketch.css'

关于javascript - 在 NextJS/React 中加载 Skeleton 实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/74985549/

相关文章:

html - 在悬停时实现第二张图片的重要因素是什么?

reactjs - 如何使用react hook useState添加到对象?

javascript - 如何在 typescript 中使用外部javascript库-Angular 4

java - Typescript 中的工厂模式并仅公开工厂类

javascript - ReactJS 更新输入的 onChange 简单数组

javascript - 如何在单击按钮 angular2 时复制输入字段

javascript - 无法获取 Html.Kendo().ComboBoxFor 的选定值

javascript - clearTimeout 不起作用 - setinterval 问题

Javascript:通过以编程方式设置值来触发 onChange

javascript - 在 React 中将计算样式传递给子项