expo-video-player, использующий ссылку на видео в этой простой библиотеке

#javascript #reactjs #react-native #expo

#javascript #reactjs #реагировать-родной #expo

Вопрос:

Просто пытаюсь создать ссылку на компонент VideoPlayer — так как к нему должна прилагаться куча функций воспроизведения Expo video. ?

В документах сказано просто добавить ссылку в параметры videoRef .. так я и сделал:

 
        constructor(props) {                                                                                                                       
            super(props);                                                                                                                           
            this.videoRef = React.createRef();                                                                                                      
            this.state = {                                                                                                                          
            };                                                                                                                                      
          }; 

          <VideoPlayer                                                                                                                      
            videoProps={{                                                                                                                   
              shouldPlay: false,                                                                                                            
              resizeMode: Video.RESIZE_MODE_CONTAIN,                                                                                        
              source: {                                                                                                                     
                uri: this.props.navigation.state.params.videoUrl,                                                                           
              },                                                                                                                            
            }}                                                                                                                              
            videoRef={this.videoRef}                                                                                                 
            isLooping={true}                                                                                                                
            inFullscreen={true}                                                                                                             
            videoBackground='transparent'                                                                                                   
            height={height}                                                                                                                 
            width={width}                                                                                                                   
            showControlsOnLoad={true}                                                                                                       
          />   

  

Результат после рендеринга видео:
this.videoRef == Object { "current": null }

Дальнейшее расследование: в коде — тип Video для videoRef ? Документы, похоже, ожидают ref в качестве типа. Не уверен, что понимаю, как бы я передал Video компонент videoRef param в VideoPlayer компоненте. Это то, что меня немного смущает.

Любая помощь была бы потрясающей — спасибо.

Комментарии:

1. Здравствуйте, не могли бы вы попробовать заменить ‘videoRef={this.videoRef}’ на ‘videoRef={(a) => this.videoRef = a}’ и дать мне знать?

2. А также попробовать ref={(a) => (videoRef = a)} ?

3. Я разобрался в этом и опубликовал ответ — ура.

Ответ №1:

Документация неверна. videoRef ожидается как часть videoProps значения. Также в документах говорится, что ожидаемый тип является ссылкой, это тоже неверно. Код ожидает функцию.

    _handleVideoRef = (component) => {
      this.videoPlayerRef = component;
    }

      <VideoPlayer                                                                                                                              
        videoProps={{                                                                                                                                  
          videoRef: this._handleVideoRef,     /* THIS IS CORRECT*/                                                                                                           
          shouldPlay: false,                                                                                                                           
          resizeMode: Video.RESIZE_MODE_CONTAIN,                                                                                                       
          source: {                                                                                                                                    
            uri: this.props.navigation.state.params.videoUrl,                                                                                          
          },                                                                                                                                           
        }}                                                                                                                                             
        isLooping={true}                                                                                                                               
        inFullscreen={true}                                                                                                                            
        videoBackground='transparent'                                                                                                                  
        height={height}                                                                                                                                
        width={width}                                                                                                                                  
        showControlsOnLoad={true}                                                                                                                      
      />