【问题标题】:Having problem in putting headings in react将标题放入反应中时遇到问题
【发布时间】:2020-02-17 02:19:01
【问题描述】:

我正在尝试放置 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")
   )

【问题讨论】:

  • 我已经编辑了代码并添加了Fragment,但仍然无法正常工作。

标签: javascript reactjs


【解决方案1】:

您需要有一个父元素,而不是 &lt;div&gt;&lt;/div&gt; 后跟另一个 &lt;div&gt;&lt;/div&gt;。您应该使用 React.Fragment 作为父元素:

render() {
   return (
     <>
        <h1>Drum Machine</h1>
        <div>
          //other stuff
        </div>
     </>
  );
}

代码中还有一些语法错误,即:

  • 没有在构造函数中关闭数组
  • 构造函数中的this.state 没有右大括号
  • maprender() 中的表达式周围没有大括号

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>

【讨论】:

  • 强烈建议告诉人们使用Fragment而不是不必要的div
  • 顺便说一句,这是来自 React 核心人员之一的关于 divFragment 的讨论:stackoverflow.com/questions/47761894/…
  • 好电话@Nick
  • 代码与您的问题一样吗?如果是这样,则存在一些语法错误,例如没有在构造函数中使用]this.state 闭合大括号关闭鼓垫阵列
  • 我已经用 sn-p 更新了答案,修复了语法错误,它按预期工作
猜你喜欢
  • 1970-01-01
  • 2017-02-18
  • 2020-03-18
  • 1970-01-01
  • 2011-03-16
  • 1970-01-01
  • 1970-01-01
  • 2023-03-24
  • 2018-01-17
相关资源
最近更新 更多