URL.createObjectUrl
wouldn’t work when I re-upload another file after uploading at the first time. videoFile
is updated but it doesn’t generate object url…
const [videoFile, setVideoFile] = useState<File>() const uploadVideo = (selectorFiles: FileList | null) => { if(selectorFiles) { setVideoFile(selectorFiles[0]) } } return ( <> <video controls> <source src={URL.createObjectURL(videoFile)} /> </video> <input type="file" onChange={(e) => uploadVideo(e.target.files)} /> </> )
Advertisement
Answer
It works. Just render the video element when file exists.
Refer to the working example on Codesandbox.
import { useState } from "react"; export default function App() { const [videoFile, setVideoFile] = useState(); const uploadVideo = (selectorFiles) => { if (selectorFiles) { setVideoFile(selectorFiles[0]); } }; return ( <> {videoFile && ( <video controls> <source src={URL.createObjectURL(videoFile)} /> </video> )} <input type="file" onChange={(e) => uploadVideo(e.target.files)} /> </> ); }