在HTML中,我通过此代码创建一个音频按钮
<html><head> <meta charset="utf-8"> <meta name="viewport" content="width=device-width, initial-scale=1"> <script type="text/javascript" src="http://cdnjs.cloudflare.com/ajax/libs/jquery/2.0.3/jquery.min.js"></script> <script type="text/javascript" src="http://netdna.bootstrapcdn.com/bootstrap/3.3.4/js/bootstrap.min.js"></script> <link href="http://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.3.0/css/font-awesome.min.css" rel="stylesheet" type="text/css"> <link href="http://pingendo.github.io/pingendo-bootstrap/themes/default/bootstrap.css" rel="stylesheet" type="text/css"> </head><body> <script> function aud_play_pause() { var myAudio = document.getElementById("myTune"); if (myAudio.paused) { myAudio.play(); } else { myAudio.pause(); } } </script> <audio id="myTune"> <source src="./audio/rain.mp3"> </audio> <div class="col-md-2"> <div class="row"> <div class="col-md-12"> <a class="btn btn-block btn-lg btn-primary" data-toggle="button" onclick = "aud_play_pause()">Rain</a> </div> </div> </div> </body>
它可以正常工作,但是在reactjs中,我在下面使用三个文件,并且该文件与html具有相同的路径,但是代码无法正常工作,因此我得到了一个空白网站。对不起,我的英语不好。index.html
<!doctype html> <html lang="en"> <head> <meta charset="utf-8"> <meta name="viewport" content="width=device-width, initial-scale=1"> <script type="text/javascript" src="http://cdnjs.cloudflare.com/ajax/libs/jquery/2.0.3/jquery.min.js"></script> <script type="text/javascript" src="http://netdna.bootstrapcdn.com/bootstrap/3.3.4/js/bootstrap.min.js"></script> <link href="http://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.3.0/css/font-awesome.min.css" rel="stylesheet" type="text/css"> <link href="http://pingendo.github.io/pingendo-bootstrap/themes/default/bootstrap.css" rel="stylesheet" type="text/css"> </head> <body> <div id="root"></div> </body> </html>
Test.js
var React = require('react'); var Test = React.createClass( { aud_play_pause() { var myAudio = document.getElementById("myTune"); if (myAudio.paused) { myAudio.play(); } else { myAudio.pause(); } }, render () { return( <div> <audio id="myTune"> <source src="./audio/rain.mp3" /> </audio> <div className="col-md-2"> <div className="row"> <div className="col-md-12"> <a className="btn btn-block btn-lg btn-primary" data-toggle="button" onClick = {this.aud_play_pause()}>Rain</a> </div> </div> </div> </div> ); } }); export default Test;
index.js
import React from 'react'; import ReactDOM from 'react-dom'; import Test from './Test'; ReactDOM.render( <Test />, document.getElementById('root') );
onClick在反应期望功能。但是,当您这样做时onClick = {this.aud_play_pause()},它会返回一个值。将onClick定义更改为
onClick
onClick = {this.aud_play_pause()}
onClick = {this.aud_play_pause}
码:
var React = require('react'); var Test = React.createClass( { aud_play_pause() { var myAudio = this.mytune; if (myAudio.paused) { myAudio.play(); } else { myAudio.pause(); } }, render () { return( <div> <audio id="myTune" ref = {(ip)=> {this.mytune = ip}}> <source src={require("./audio/rain.mp3")}/> </audio> <div className="col-md-2"> <div className="row"> <div className="col-md-12"> <a className="btn btn-block btn-lg btn-primary" data-toggle="button" onClick = {this.aud_play_pause}>Rain</a> </div> </div> </div> </div> ); } }); export default Test;
例如,您还需要一个捆绑器webpack来翻译您的代码。
webpack
请参阅 此处 的设置示例:
另外,如果您使用的最新版本React,则会收到警告,提示afte v15.5.0 React.createClass将被弃用,因此最好从以下位置开始React.Component
React
v15.5.0
React.createClass
React.Component
import React from 'react'; class Test extends React.Component{ aud_play_pause() { var myAudio = this.myTune; if (myAudio.paused) { myAudio.play(); } else { myAudio.pause(); } } render () { return( <div> <audio id="myTune" ref={(ip) => {this.mytune = ip}}> <source src={require("./audio/rain.mp3")} /> </audio> <div className="col-md-2"> <div className="row"> <div className="col-md-12"> <a className="btn btn-block btn-lg btn-primary" data-toggle="button" onClick = {this.aud_play_pause}>Rain</a> </div> </div> </div> </div> ); } } export default Test;