如何使用 React Ref 调用 video.play()?

Posted

技术标签:

【中文标题】如何使用 React Ref 调用 video.play()?【英文标题】:How to use a React Ref to call video.play()? 【发布时间】:2019-04-09 05:44:40 【问题描述】:

如何使用 ref 来触发 video.play() ?

目前我收到一个错误:preview.bundle.js:261916 Uncaught TypeError: _this2.videoRef.play is not a function

这是我的组件:

import React from 'react';
import styled from 'styled-components';
import Waypoint from 'react-waypoint';

const Container = styled.div`
  position: relative;
  padding-top: 64px;
`;

const StyledVideo = styled.video`
  width: 500px;
`;


class Video extends React.Component 
  handleRef = (video) => 
    this.videoRef = video;
  ;

  render() 
    return (
      <Container>
        <Waypoint
          onEnter=() => 
            console.log(this.videoRef.props.children);
            this.videoRef.play();
          
        />
        <StyledVideo
          ref=this.handleRef
          muted
          playsinline
          poster="https://luna1.co/88dbde.png"
          loop
          src="https://d1gwm4cf8hecp4.cloudfront.net/videos/homepage/v4/Boards.mp4"
        >
          <track kind="captions" />
        </StyledVideo>

      </Container>
    );
  


export default Video;

谢谢

【问题讨论】:

【参考方案1】:

&lt;Waypoint /&gt; 组件的onEnter 回调中删除console.log(this.videoRef.props.children);,您应该会发现视频按预期播放。

有关工作示例,请参阅此 https://codesandbox.io/s/nwqwopj1p0 链接。

【讨论】:

原来我使用的是样式化组件 vs 需要 innerRef

以上是关于如何使用 React Ref 调用 video.play()?的主要内容,如果未能解决你的问题,请参考以下文章

react 函数式组件ref的使用

React中ref的使用

React父组件调用子组件属性和方法

react forward ref的使用

将输入字段聚焦在React组件中 - 尝试创建ref时出现类型错误

react 之 ref