更改源时,React-native-video 不会更改视频

Trí*_*Lâm 3 controls react-native react-native-video

我使用 react-native-video 为我的应用渲染视频播放器。

我尝试更改视频的来源。这是我的代码运行良好。

<Video
  source={{uri: _getVideo().video_url}}
  style={Styles.backgroundVideo}
  autoplay={true}
  controls={false}
  disableFocus={true}
  resizeMode="cover"
/>;
Run Code Online (Sandbox Code Playgroud)

但我改变了'controls={true}'。它不渲染新视频,只渲染音频。并且仍然显示旧视频。

_getVideo().video_url
Run Code Online (Sandbox Code Playgroud)

这个函数只是返回源视频。我确定元素也会更改源,但不会重新渲染新视频。

有没有办法解决它?

Jay*_*ani 5

你做错了,尽管它有效。

但是让我告诉你这里发生了什么,

source={{uri: _getVideo().video_url}}
Run Code Online (Sandbox Code Playgroud)

每次执行render方法时都会执行这一行,在setState、props变化等事件后调用render方法。

因此_getVideo(),尽管不需要,您的方法将被多次调用。

因此我建议你为 URL 初始化一个状态变量。在你想要的地方调用你的 _getVideo()。可能在 componentDidMount 上首次运行,然后单击按钮或其他任何您想要的东西,但使用 _getVideo 方法中的 setState 将此 URL 设置为该状态。

所以想要的东西会是这样,

source={{uri: _getVideo().video_url}}
Run Code Online (Sandbox Code Playgroud)

现在,如果您注意到我又添加了一个道具key,这将解决您的旧视频问题。每当 URL 更改时,请更改密钥中的某些内容。所以我取了一个状态并将它传递给这个道具。现在你可以用 0 初始化它,下次只需使用 setState 增加它。