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

标签 javascript reactjs

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

我理解 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/

相关文章:

javascript - 如何让一个javascript函数在dom就绪时只执行一次

node.js - webpack-dev-middleware 与 create-react-app

javascript - 如何通过使用 fetch API 响应 native 将图像发布到数据库?

reactjs - 我可以仅使用 webpack 将代码块标记为生产或开发吗?

javascript - 使用 Javascript 或 JQuery 的 Html.TextBoxFor 的明文

Javascript - 多表单显示问题

javascript - 将日期与 10 年前的今天日​​期进行比较

javascript - 将 MongoDB/ExpressJS 查询存储到数组中并显示到 HTML 表中

javascript - React JS 和 Sass-loader 与 webpack 发生错误

javascript - 突出显示单击的页码