質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
React.js

Reactは、アプリケーションのインターフェースを構築するためのオープンソースJavaScriptライブラリです。

Q&A

解決済

1回答

1307閲覧

React 親コンポーネントで子コンポーネントのvideo.duration取得方法

te_ff

総合スコア13

React.js

Reactは、アプリケーションのインターフェースを構築するためのオープンソースJavaScriptライブラリです。

0グッド

0クリップ

投稿2021/04/01 09:31

前提・実現したいこと

Reactで動画を複数再生できるページを作成しております。
親コンポーネントでdurationをstateにセットするloadedMetadataを用意し、子コンポーネントで発火した際にduration取得方法がわかりません。
どのようにすれば取得できますでしょうか?

該当のソースコード

React.js

1[親コンポーネント] 2import React, { useEffect, useState, useRef } from 'react'; 3import { VideoPlayer } from './VideoPlayer' 4 5export const VideoContent = (props) => { 6 7 const [duration, setDuration] = useState(0); 8 9 const renderVideo = () => { 10 return props.video.map((v, index) => 11 <VideoPlayer key={v.id} {...v} loadedMetadata={loadedMetadata} /> 12 ); 13 } 14 15 /** 16 *ビデオ読み込み後Durationセット 17 */ 18 const loadedMetadata = (target) => { 19 console.log(target.duration); 20 setDuration(target.duration) 21 } 22 23 return( 24 <> 25 {renderVideo()} 26 </> 27 ) 28}
[子コンポーネント(ビデオ表示部分)] import React, { useRef, useEffect } from "react" export const VideoPlayer = React.memo(props => { const ref = useRef(); const src = 'http://localhost:8000' + props.video; return( <div> <video ref={ref} onLoadedMetadata={props.loadedMetadata(this)}> <source src={src} /> </video> </div> ) });

試したこと

子コンポーネント
onLoadedMetadata={props.loadedMetadata(this)}

onLoadedMetadata={(e) => props.loadedMetadata(e)}
に変更

子コンポーネント
onLoadedMetadata={props.loadedMetadata(this)}

onLoadedMetadata={props.loadedMetadata(ref)}
に変更
target.currentがundefined

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

自己解決

初歩的なミスでした
子コンポーネント
onLoadedMetadata={() => props.loadedMetadata(ref)}

親コンポーネント
const loadedMetadata = (target) => {
setDuration(target.current.duration);
}
で解決しました

投稿2021/04/01 10:01

te_ff

総合スコア13

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問