reactjs Next.js loadeddata事件< audio>未激发

tp5buhyn  于 2023-01-12  发布在  React
关注(0)|答案(2)|浏览(123)

我试图找出为什么loadeddata/loadedmetadata事件在我的应用程序中没有触发。实际上,有时候它会触发,但不一致。我怀疑这里有某种竞争条件,但经过大量的尝试和错误,以及相当多的挫折,我没有主意了。
所以,这个想法很简单,我有一个<audio>元素,我想在加载它时运行一些逻辑。
当我在一个非Nextjs React应用程序中尝试时,这似乎可以工作。
然而,当我在本地的Next.js React应用程序中运行相同的东西时,我观察到了前面提到的行为,所以我怀疑这可能是nextjs特有的。
这可以通过以下方式最低限度地重现:
1.运行npx create-next-app nextjs-blog --use-npm --example "https://github.com/vercel/next-learn-starter/tree/master/learn-starter"
1.将现有的index.js替换为:

export default function Home() {

  const handleMetadata = () => {
    alert("hi")
  }

  return (
    <div className="container">
      <main>
        <audio
          id="audio"
          onLoadedData={handleMetadata}
          onLoadedMetadata={handleMetadata}
          src="https://www.soundhelix.com/examples/mp3/SoundHelix-Song-2.mp3"
        />
      </main>
    </div>
  )
}

1.反复刷新浏览器窗口

35g0bw71

35g0bw711#

您应该加载使用音频的组件,而不加载ssr.like:

import dynamic from 'next/dynamic'
const AudioPlayer = dynamic(import('../components/Home'), {
    ssr: false
})
ogsagwnx

ogsagwnx2#

这不是一个直接的答案,但我想分享的是,上面的@YAN7答案为我解决了一个类似的问题。我在Storybook中开发了一个组件,它使用GSAP滚动触发器来拖动播放视频。它在Storybook中工作得很完美,但当我导入它并在UI/Next Js项目中使用时,它无法按预期工作。偶尔我会设法让动画效果工作,但大多数时候我不能。在大量的控制台日志记录之后,我意识到这两个例子之间唯一的显著区别是一个在Next中,而另一个不在。这最终把我带到了这里。我动态地将我的组件导入到Next中,就像在YAN 7的例子中一样,它运行得很好。非常感谢YAN 7!我希望这条评论在未来能帮助其他GSAP + Next开发人员

相关问题