在 react.js 中,如何为 video.js 对象异步分配源属性
In react.js how can you asynchronously assign source attribute for video.js object
我的知识差距是理解如何正确使用异步以获得对象 'const videoJsOptions' 的属性 'src' 的正确值。
import React, { useEffect, useState } from 'react';
import VideoPlayer from "./VideoPlayer";
import Amplify, { Storage } from 'aws-amplify';
function VideoPlayerPage () {
const [state, setState] = React.useState({ vidSrc: "" })
useEffect(() => {
async function getURI() {
try {
const value = await Storage.get("andy_2020_something_description.mp4");
console.log(value);
setState({ vidSrc: value });
} catch (error) {
console.log(error);
}
}
getURI();
}, [] );
const videoJsOptions = {
autoplay: true,
controls: true,
sources: [{
// If I replace the reference to state on the line below with a string of the URL then the video.js player will work fine.
src: state.vidSrc,
type: 'video/mp4'
}]
}
return (
<div>
<h1> value of state: { state.vidSrc } </h1>
<VideoPlayer {...videoJsOptions} />
</div>
)
}
export default VideoPlayerPage
那么页面上的 rendered/displayed 是什么:
value of state: { state.vidSrc }
是完全有效的 URL。如果我将此 URL 硬编码为字符串以替换行中的变量:
src: state.vidSrc,
then the video.js player works fine.
我在想 'const videoJsOptions' 可能过早地传递给了 VideoPlayer 组件,但我不知道如何解决这个问题,也就是说,让它等到稍后,例如当行:
value of state: { state.vidSrc }
显示。
非常感谢进一步调试的想法。
你为什么不做条件渲染,
{ state.vidSrc && <VideoPlayer {...videoJsOptions} /> }
这将确保播放器仅在正确的值可用后才呈现
我的知识差距是理解如何正确使用异步以获得对象 'const videoJsOptions' 的属性 'src' 的正确值。
import React, { useEffect, useState } from 'react';
import VideoPlayer from "./VideoPlayer";
import Amplify, { Storage } from 'aws-amplify';
function VideoPlayerPage () {
const [state, setState] = React.useState({ vidSrc: "" })
useEffect(() => {
async function getURI() {
try {
const value = await Storage.get("andy_2020_something_description.mp4");
console.log(value);
setState({ vidSrc: value });
} catch (error) {
console.log(error);
}
}
getURI();
}, [] );
const videoJsOptions = {
autoplay: true,
controls: true,
sources: [{
// If I replace the reference to state on the line below with a string of the URL then the video.js player will work fine.
src: state.vidSrc,
type: 'video/mp4'
}]
}
return (
<div>
<h1> value of state: { state.vidSrc } </h1>
<VideoPlayer {...videoJsOptions} />
</div>
)
}
export default VideoPlayerPage
那么页面上的 rendered/displayed 是什么:
value of state: { state.vidSrc }
是完全有效的 URL。如果我将此 URL 硬编码为字符串以替换行中的变量:
src: state.vidSrc, then the video.js player works fine.
我在想 'const videoJsOptions' 可能过早地传递给了 VideoPlayer 组件,但我不知道如何解决这个问题,也就是说,让它等到稍后,例如当行:
value of state: { state.vidSrc }
显示。
非常感谢进一步调试的想法。
你为什么不做条件渲染,
{ state.vidSrc && <VideoPlayer {...videoJsOptions} /> }
这将确保播放器仅在正确的值可用后才呈现