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

React-native-video not change video when change source

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

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

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

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

_getVideo().video_url

此功能只是return源视频。我确定元素也会更改源但不会重新渲染新视频。

有什么办法可以解决吗?

虽然它有效,但你做错了。

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

source={{uri: _getVideo().video_url}}

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

因此您的 _getVideo() 方法将被调用任意次数,尽管这不是必需的。

因此我建议您为 URL 初始化一个状态变量。在你想要的地方打电话给你的 _getVideo() 。可能在 componentDidMount 上第一次 运行 然后点击按钮或任何其他你想要的但是在 _getVideo 方法中使用 setState 将这个 URL 设置到那个状态。

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

<Video
  key={this.state.videoComponentKey}
  source={{uri: this.state.video_url}}
  style={Styles.backgroundVideo}
  autoplay={true}
  controls={false}
  disableFocus={true}
  resizeMode="cover"
/>;

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