javascript - 有没有办法在它所在的组件上更改状态后更改音频播放器的 url?
问题描述
我正在开发一个使用文本到语音 API 服务的应用程序。在前端,我有一个 textarea 元素,它接收输入值和一个按钮,因此可以进行 post 调用,以便我以 URL 的形式取回我编写的脚本的语音。这些是组件的状态变量
state = {
textVal: "",
audioUrl: "",
}
这是handleChange 方法、textarea 和按钮HTML。
handleChange() {
this.setState({ textVal: event.target.value });
}
<textarea
placeholder="Insert script here"
rows="4"
cols="50"
value={this.state.textVal}
onChange={this.handleChange}
/>
<button onClick={this.audioRequest}>
Listen
</button>
这就是我打电话的方式,尽管我删除了不必要的东西
audioRequest() {
const data = {
textScript: this.state.textVal,
};
axios.post(
"...", data)
.then(({ data }) => {
this.setState({
audioUrl: data.audioUrl,
});
});
}
在此之后,我将 URL 传递给音频播放器元素,如图所示,只有一个条件来检查我的 URL 是否不为空
<audio controls>
{(this.state.audioUrl === "") ?
"Nothing to play yet" :
<source src={this.state.audioUrl} type="audio/wav" />}
</audio>
当我输入一个新脚本并点击监听按钮时,问题就开始了,我确实在控制台中获得了新的 URL,但音频播放器不会播放新的脚本,而是播放第一个脚本。
我真的很感激这里的一些帮助。
解决方案
您还必须进行音频重播,如下所示:
onClick={() => {
setSource("/file_example_OOG_1MG.ogg");
ref.current.pause();
ref.current.load();
ref.current.play();
}}
工作示例:https ://codesandbox.io/s/react-audio-player-forked-wx225?file=/src/Player/Player.js
推荐阅读
- javascript - Express.JS 正文解析器返回未定义
- java - $JAVA_HOME 被覆盖,无法使用 maven
- node.js - 使用 aws-sdk 的 Cognito listUsers 非常慢
- flutter - 从 iphone 启动器本身运行颤振应用程序
- jenkins - Jenkins管道凭证单引号和双引号插值
- vba - 如何在带有时区的Outlook中设置约会
- r - 根据命名向量 (R) 更改列名
- node.js - node-rdkafka 问题:消费者在一段时间后断开连接
- laravel - 如何在laravel中获取具有另一个名称的模型的关系数据?
- javascript - 使用 Google Apps 脚本从 Google 幻灯片演示文稿中提取所有 URL 链接