Я немного продвинулся, поэтому решил ответить на свой вопрос в надежде получить отзывы от хороших гуру Samaritan React / JSX.
Я все еще знакомлюсь с синтаксисом React / JSX, но мне действительно нравится то, что я узнал до сих пор.Модульный подход, безусловно, гораздо более эффективен, так как он связан с памятью / оптимизацией ... и позволяет намного легче определять ошибки и ошибки.С учетом сказанного ... вот что я обнаружил до сих пор:
- Я понял, как воспроизвести / приостановить видео с помощью внешнего компонента (пользовательские элементы управления плеером).
- Iузнал, что было бы разумно спроектировать мой макет с отдельными (вложенными) компонентами, в отличие от одного большого беспорядка (т. е. отдельных компонентов, которые объединены в класс, который затем вставляется в мой компонент, который вставляется в мой)
Я все еще пытаюсь понять, как передавать реквизит между компонентами.Концепция состояний и свойств имеет смысл для меня, но мне не хватает фундаментального понимания того, как правильно выполнять рабочий процесс.Я уверен, что это как-то связано с жизненными циклами React, но это совершенно отдельный разговор.
Пока пример моего обновленного кода опубликован ниже.Я могу воспроизводить / приостанавливать видео HTML5 с внешними компонентами (пользовательские элементы управления проигрывателя), но как передать элемент props обратно компонентам пользовательских элементов управления?Например, как мне сопоставить реквизиты по умолчанию (то есть «currentTime», «duration», «seek», «end» => с «currentTime», «totalTime», «onSeek» и т. Д.)?
Прошу прощения за мою длинную напыщенную речь, но любые отзывы будут очень благодарны.Вот мой обновленный код:
import React, { Component } from 'react';
import PropTypes from 'prop-types';
import { PlaybackControls, PlayButton, PauseButton, FormattedTime, TimeMarker, TimeMarkerType, ProgressBar } from 'react-player-controls';
import customControls from './customControls.scss';
export default class CustomControls01 extends Component {
constructor(props) {
super(props);
this.state = {
isEnabled: true,
isPlayable: true,
isPlaying: false,
showPrevious: false,
hasPrevious: false,
showNext: false,
hasNext: false,
totalTime: 28,
currentTime: 0,
bufferedTime: 0,
isSeekable: true,
lastSeekStart: 0,
lastSeekEnd: 0,
markerSeparator: ' / ',
firstMarkerType: TimeMarkerType.ELAPSED,
secondMarkerType: TimeMarkerType.DURATION,
}
this.handlePlay = this.handlePlay.bind(this)
this.handlePause = this.handlePause.bind(this)
}
componentDidMount() {
}
componentWillUnmount() {
}
/**********************************************************************\
Video Playback Controls
\**********************************************************************/
handlePlay() {
vid01.play()
}
handlePause() {
vid01.pause()
}
render() {
const { isPlayable, isPlaying, showPrevious, showNext, hasPrevious, hasNext, totalTime, currentTime, markerSeparator, firstMarkerType, secondMarkerType, bufferedTime, isSeekable, lastSeekStart, lastSeekEnd, lastIntent, className, extraClasses, childClasses, style, childrenStyles, onPlaybackChange } = this.props;
const TimeMarkerType = {
ELAPSED: 'ELAPSED',
REMAINING: 'REMAINING',
REMAINING_NEGATIVE: 'REMAINING_NEGATIVE',
DURATION: 'DURATION',
}
return (
<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({ ...this.state, isPlaying }, isPlaying ? (vid01) => this.handlePlay(isPlaying, isPlayable) : (vid01) => this.handlePause(isPlaying, isPlayable))}
/>
<ProgressBar className={customControls.ProgressBar}
totalTime={this.state.totalTime}
currentTime={this.state.currentTime}
bufferedTime={this.state.bufferedTime}
isSeekable={this.state.isSeekable}
onSeek={time => this.setState((vid01) => ({ currentTime: time }))}
onSeekStart={time => this.setState((vid01) => ({ lastSeekStart: time }))}
onSeekEnd={time => this.setState((vid01) => ({ lastSeekEnd: time }))}
onIntent={time => this.setState((vid01) => ({ lastIntent: time }))}
/>
<TimeMarker className={customControls.TimeMarker}
totalTime={this.state.totalTime}
currentTime={this.state.currentTime}
markerSeparator={this.state.markerSeparator}
firstMarkerType={this.state.firstMarkerType}
secondMarkerType={this.state.secondMarkerType}
/>
</div>
);
}
}
CustomControls01.propTypes = {
};