gpt4 book ai didi

javascript - 尝试将媒体播放器代码从 JavaScript 转换为 ReactJS 时出错 : Unexpected token

转载 作者:塔克拉玛干 更新时间:2023-11-02 21:08:20 24 4
gpt4 key购买 nike

我正在尝试编写自己的自定义媒体播放器,但遇到了一些问题。

我理解 JavaScript,但我不明白下面的 JavaScript 如何转换为 ReactJS。注意:我已将媒体播放器 ID 更改为 #player

我得到的错误是

  Line 5:  Parsing error: Unexpected token  3 | export default class MediaPlayer extends Component{
4 | >
5 | var x = document.getElementById("player");
| ^
6 |
7 |
8 | componentDidMount(){

这是原始的 JavaScript 代码。

<script>
var x = document.getElementById("myAudio");

function playAudio() {
x.play();
}

function pauseAudio() {
x.pause();
}
</script>

我的 ReactJS 代码

import React, {Component} from 'react';

export default class MediaPlayer extends Component{
componentDidMount(){
var x = document.getElementById("player");
}

onClickPlay() {
x.play();
}

pauseAudio(){
x.pause();
}
render(){
return (
<div>
<h3>mediaplayer</h3>

<audio id="player">
<source src="https://samcloud.spacial.com/api/listen?sid=106487&m=sc&rid=184639" type="audio/mpeg"/></audio>
<button onClick={this.onClickPlay}>Play</button>
</div>
)
};
}

最佳答案

问题:您在 onClickPlaypauseAudio 函数中使用了 x,但是他们对此有问题引用,因为 var 是在 componentDidMount 范围内定义的。

解决方案:看这个codesandbox :

  • 将播放/暂停逻辑统一到一个函数 onClickPlay 中。
  • 请注意 var x = document.getElementById("player");onClickPlay 中。
  • 我还使用了一个钩子(Hook)来保存一个 bool 值,指示 isPlaying 与否。

希望对您有所帮助。

import React, { useState } from "react";
import ReactDOM from "react-dom";

const MediaPlayer = () => {
const [isPlaying, setIsPlaying] = useState(false);

const onClickPlay = () => {
var x = document.getElementById("player");
if (isPlaying) x.pause();
else x.play();
setIsPlaying(!isPlaying);
}

return (
<div>
<h3>media player</h3>
<audio id="player">
<source
src="https://samcloud.spacial.com/api/listen?sid=106487&m=sc&rid=184639"
type="audio/mpeg"
/>
</audio>
<button onClick={onClickPlay}>Play</button>
</div>
);
}

const rootElement = document.getElementById("root");
ReactDOM.render(<MediaPlayer />, rootElement);

这里有 React v16.8 之前的替代方案:

class MediaPlayer extends React.Component {
constructor(props) {
super(props);
this.state = { isPlaying: false }
this.onClickPlay = this.onClickPlay.bind(this);
}

onClickPlay() {
const { isPlaying } = this.state;
var x = document.getElementById("player");
if (isPlaying) x.pause();
else x.play();
this.setState({
isPlaying: !isPlaying
});
}

render() {
return (
<div>
<h3>media player</h3>
<audio id="player">
<source src="https://samcloud.spacial.com/api/listen?sid=106487&m=sc&rid=184639" type="audio/mpeg" />
</audio>
<button onClick={this.onClickPlay}>Play</button>
</div>
);
}
}

ReactDOM.render(<MediaPlayer />, document.getElementById('container'));

关于javascript - 尝试将媒体播放器代码从 JavaScript 转换为 ReactJS 时出错 : Unexpected token,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56914781/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com