You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将普通JS脚本改写为React函数组件可用代码并解决videoslider未声明报错

问题排查

你出现报错和功能失效的原因有三点:

  • 事件绑定语法错误:React的事件监听属性为驼峰命名onClick,而非原生的小写onclick,且不能直接传入字符串形式的函数调用,需要传入函数实例
  • 原生DOM操作不符合React规范:直接用document.querySelector修改DOM属性属于命令式操作,React更推荐用状态驱动视图更新
  • 属性命名错误:React中给元素指定CSS类需要用className属性,而非原生的class
可行修改方案

推荐使用状态驱动的写法,完整组件代码如下:

import { useState } from 'react'

function VideoSlider() {
  // 用状态存储当前播放的视频地址
  const [currentVideo, setCurrentVideo] = useState('1.mp4')

  const videoslider = (link) => {
    setCurrentVideo(link)
  }

  return (
    <div className="container">
      <video 
        src={currentVideo} 
        className="slider" 
        autoplay 
        loop 
        muted 
        controls
      ></video>

      <ul>
        <li onClick={() => videoslider('1.mp4')}><video src="1.mp4"></video></li>
        <li onClick={() => videoslider('2.mp4')}><video src="2.mp4"></video></li>
        <li onClick={() => videoslider('3.mp4')}><video src="3.mp4"></video></li>
        <li onClick={() => videoslider('4.mp4')}><video src="4.mp4"></video></li>
        <li onClick={() => videoslider('5.mp4')}><video src="5.mp4"></video></li>
      </ul>
    </div>
  )
}

export default VideoSlider

如果确实需要直接操作DOM元素,可以用useRef钩子替换document.querySelector:

import { useRef } from 'react'

function VideoSlider() {
  // 绑定slider元素的ref
  const sliderRef = useRef(null)

  const videoslider = (link) => {
    sliderRef.current.src = link
  }

  return (
    <div className="container">
      <video 
        ref={sliderRef}
        src="1.mp4" 
        className="slider" 
        autoplay 
        loop 
        muted 
        controls
      ></video>
      {/* 列表部分和上面写法一致 */}
    </div>
  )
}

内容的提问来源于stack exchange,提问作者Inception_K

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 18:15:02