【问题标题】:How to use onClick with divs in React.js如何在 React.js 中将 onClick 与 div 一起使用
【发布时间】:2017-03-24 22:39:32
【问题描述】:

我正在制作一个非常简单的应用程序,您可以在其中单击方形 div 将它们的颜色从白色更改为黑色。但是,我遇到了麻烦。我想使用 onClick 函数来允许用户点击一个正方形来改变它的颜色,但它似乎不起作用。我尝试过使用 spans 和空 p 标签,但这也不起作用。

这里是有问题的代码:

var Box = React.createClass({
    getInitialState: function() {
        return {
            color: 'white'
        };
    },

    changeColor: function() {
        var newColor = this.state.color == 'white' ? 'black' : 'white';
        this.setState({
            color: newColor
        });
    },

    render: function() {
        return (
            <div>
                <div
                    style = {{background: this.state.color}}
                    onClick = {this.changeColor}
                >
                </div>
            </div>
        );
    }
});

这是我在 CodePen 上的小项目的链接。 http://codepen.io/anfperez/pen/RorKge

【问题讨论】:

    标签: javascript reactjs onclick event-handling state


    【解决方案1】:

    这行得通

    var Box = React.createClass({
        getInitialState: function() {
            return {
                color: 'white'
            };
        },
    
        changeColor: function() {
            var newColor = this.state.color == 'white' ? 'black' : 'white';
            this.setState({ color: newColor });
        },
    
        render: function() {
            return (
                <div>
                    <div
                        className='box'
                        style={{background:this.state.color}}
                        onClick={this.changeColor}
                    >
                        In here already
                    </div>
                </div>
            );
        }
    });
    
    ReactDOM.render(<Box />, document.getElementById('div1'));
    ReactDOM.render(<Box />, document.getElementById('div2'));
    ReactDOM.render(<Box />, document.getElementById('div3'));
    

    在你的css中,删除你拥有的样式并放上这个

    .box {
      width: 200px;
      height: 200px;
      border: 1px solid black;
      float: left;
    }
    

    您必须设置您调用onClick 的实际div 的样式。给 div 一个 className,然后设置它的样式。还要记得删除你正在渲染App到dom中的这个块,App没有定义

    ReactDOM.render(<App />,document.getElementById('root'));
    

    【讨论】:

    • 谢谢!让我有点绊倒的盒子的造型。这绝对有效!
    【解决方案2】:

    对于未来的谷歌人(现在已经有数千人在谷歌上搜索过这个问题)

    为了让您放心,onClick 事件确实适用于 react 中的 div,因此请仔细检查您的代码语法。

    这些是正确的:

    <div onClick={doThis}>
    <div onClick={() => doThis()}>
    

    这些都是错误的:

    <div onClick={doThis()}>
    <div onClick={() => doThis}>
    

    (别忘了关闭标签...注意这一点:

    <div onClick={doThis}
    

    div 上缺少结束标签)

    【讨论】:

      【解决方案3】:

      您的盒子没有尺寸。如果你设置宽度和高度,它就可以了:

      var Box = React.createClass({
          getInitialState: function() {
              return {
                  color: 'black'
              };
          },
      
          changeColor: function() {
              var newColor = this.state.color == 'white' ? 'black' : 'white';
              this.setState({
                  color: newColor
              });
          },
      
          render: function() {
              return (
                  <div>
                      <div
                          style = {{
                              background: this.state.color,
                              width: 100,
                              height: 100
                          }}
                          onClick = {this.changeColor}
                      >
                      </div>
                  </div>
              );
          }
      });
      
      ReactDOM.render(
        <Box />,
        document.getElementById('box')
      );
      <script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react.min.js"></script>
      <script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react-dom.min.js"></script>
      
      <div id='box'></div>

      【讨论】:

      • 感谢 Timo,但是当我尝试在我的 CodePen sn-p 中使用它时,该代码似乎不起作用。那是因为我的 CSS 文件中还指定了宽度和高度吗?我用你的代码编辑了它,但它仍然不起作用。
      • 怎么不行?我的答案中的 sn-p 工作得很好。
      【解决方案4】:

      下面的代码现在可以工作了!!!

      const test = () => {
      const onClick = () => console.log('hi');
      
      return (
      <div onClick={onClick} aria-hidden="true">
        Content here
      </div>
      )};
      

      【讨论】:

        【解决方案5】:

        虽然这可以通过 react 来完成,但请注意,将 onClicks 与 div 一起使用(而不是 Button 或 Anchors,以及其他已经具有点击事件行为的方法)是不好的做法,应尽可能避免。

        【讨论】:

          【解决方案6】:

          我只需要一个简单的 react.js 测试按钮。这就是我所做的,它奏效了。

          function Testing(){
           var f=function testing(){
                   console.log("Testing Mode activated");
                   UserData.authenticated=true;
                   UserData.userId='123';
                 };
           console.log("Testing Mode");
          
           return (<div><button onClick={f}>testing</button></div>);
          }
          

          【讨论】:

          • 这与问题有什么关系?
          【解决方案7】:

          这也有效:

          我刚换了this.state.color==='white'?'black':'white'

          您还可以从下拉值中选择颜色并更新以代替“黑色”;

          (CodePen)

          【讨论】:

            猜你喜欢
            • 2018-05-11
            • 2021-11-13
            • 2017-03-21
            • 2018-03-25
            • 2018-12-26
            • 2020-12-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多