我试图输入h1标题,但是如果我仅输入标题并注释掉按钮,则不会打印标题。如果我评论标题,则按钮不会打印。但是在一起不会打印任何内容。有什么建议吗?
class App extends React.Component {
constructor(props) {
super(props);
this.state = {
drumPads : [
{
id: "Q",
src: "https://s3.amazonaws.com/freecodecamp/drums/Heater-1.mp3",
beat: "Heater-1",
},
{
id: "W",
src: "https://s3.amazonaws.com/freecodecamp/drums/Heater-2.mp3",
beat: "Heater-2"
},
}
handleClick(id, beat) {
return () => {
document.getElementById(id).play();
this.setState({
beatName: beat,
});
};
}
render() {
return (
<Fragment>
<h1>DrumMachine</h1>
<div>
this.state.drumPads.map((button, i) =>
<button key={i} onClick={this.handleClick(button.id, button.beat)}><h1>{ button.id }</h1>
<audio id={button.id} src={button.src} />
</button>
)
</div>
</Fragment>
)
}
}
ReactDOM.render( <App />,
document.getElementById("root")
)
答案 0 :(得分:2)
您需要有一个父元素,而不是<div></div>
,后跟另一个<div></div>
。您应该使用React.Fragment
作为父元素:
render() {
return (
<>
<h1>Drum Machine</h1>
<div>
//other stuff
</div>
</>
);
}
代码中还存在一些语法错误,即:
this.state
上没有右括号map
中render()
表达式周围没有括号
class App extends React.Component {
constructor(props) {
super(props);
this.state = {
drumPads: [
{
id: "Q",
src: "https://s3.amazonaws.com/freecodecamp/drums/Heater-1.mp3",
beat: "Heater-1"
},
{
id: "W",
src: "https://s3.amazonaws.com/freecodecamp/drums/Heater-2.mp3",
beat: "Heater-2"
}
]
};
}
handleClick(id, beat) {
return () => {
document.getElementById(id).play();
this.setState({
beatName: beat
});
};
}
render() {
return (
<React.Fragment>
<h1>DrumMachine</h1>
<div>
{this.state.drumPads.map((button, i) =>
<button key={i} onClick={this.handleClick(button.id, button.beat)}>
<h1>{button.id}</h1>
<audio id={button.id} src={button.src} />
</button>
)}
</div>
</React.Fragment>
);
}
}
ReactDOM.render(<App />, document.getElementById("root"));
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/16.6.3/umd/react.production.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react-dom/16.6.3/umd/react-dom.production.min.js"></script>
<div id="root"></div>