【发布时间】:2018-06-03 21:29:43
【问题描述】:
我是 React 框架的新手,所以我还在学习 JSX 语法和模式。
我正在尝试将自定义视频控件 UI 挂接到 HTML5 视频元素中,但无济于事。
我可以通过简单的 onClick 功能获得单独的 PLAY 和 PAUSE 按钮来控制视频,但是当我将 PLAY/PAUSE 作为切换元素与组件组合时,我无法弄清楚如何组合 PLAY/PAUSE使用我的 handlePlay()/handlePause() 函数的图标切换事件。
我确定这是我缺少的新手步骤,但我几乎被困在这里......任何反馈将不胜感激。
*编辑:在“PlaybackControls”中添加了这一行( onClick={isPlaying ? console.log('PLAYING!') : console.log('PAUSED!')} )
console.log() 打印 'PLAYNING!'和“暂停!” onClick 事件,正如预期的那样……但是如果我用对“handlePlay()”和“handlePause()”函数的调用替换 console.log()s……没有任何反应。
我错过了什么?
下面列出了我的代码示例:
import React, { Component } from 'react';
import { PlaybackControls, PlayButton, PauseButton, FormattedTime,
TimeMarker, ProgressBar } from 'react-player-controls';
import customControls from './customControls.scss';
export default class Video01 extends Component {
constructor(props) {
super(props);
this.state = {
isPlayable: true,
isPlaying: false,
showPrevious: false,
hasPrevious: false,
showNext: false,
hasNext: false
}
this.handlePlay = this.handlePlay.bind(this)
this.handlePause = this.handlePause.bind(this)
}
componentDidMount() {
}
componentWillMount() {
}
/**********************************************************************\
Video Playback Controls
\**********************************************************************/
handlePlay () {
if (this.props.isPlayable) {
this.props.onPlaybackChange(true)
this.refs.video01Ref.play()
}
}
handlePause () {
this.props.onPlaybackChange(false)
this.refs.video01Ref.pause()
}
render() {
return (
<div>
<div className={styles.container} data-tid="container">
<div className={styles.videoContainer} data-tid="videoContainer">
<video ref="video01Ref" src="./video/myVideo.webm" type="video/webm" />
</div>
</div>
<div className={customControls.ControlsWrapper}>
<PlaybackControls className={customControls.PlayButton, customControls.PauseButton}
isPlayable={this.state.isPlayable}
isPlaying={this.state.isPlaying}
showPrevious={false}
hasPrevious={false}
showNext={false}
hasNext={false}
onPlaybackChange={isPlaying => this.setState(Object.assign({}, this.state, { isPlaying: isPlaying }))}
onClick={isPlaying ? console.log('PLAYING!') : console.log('PAUSED!')}
/>
<ProgressBar className={customControls.ProgressBar} />
<TimeMarker className={customControls.TimeMarker} />
</div>
</div>
);
}
}
【问题讨论】: