如何在React.js中使用带有div的onClick

时间:2016-11-10 19:23:12

标签: javascript reactjs onclick event-handling state

我正在创建一个非常简单的应用程序,您可以单击方形div来将其颜色从白色更改为黑色。但是,我遇到了麻烦。我想使用onClick功能允许用户点击一个方块来改变它的颜色,但它似乎并没有起作用。我尝试过使用跨度和空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

7 个答案:

答案 0 :(得分:17)

这有效

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'));

答案 1 :(得分:4)

对于将来的Google员工(现在有数千人用谷歌搜索了这个问题)

为了让您放心,onClick事件确实与divs在react中一起使用,因此请仔细检查代码语法。

这些是正确的:

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

这些是错误的:

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

(并且不要忘记关闭标签...请注意:

<div onClick={doThis}

缺少div上的结束标记)

答案 2 :(得分:2)

你的盒子没有尺寸。如果设置宽度和高度,它可以正常工作:

&#13;
&#13;
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')
);
&#13;
<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>
&#13;
&#13;
&#13;

答案 3 :(得分:0)

我只需要一个简单的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>);
}

答案 4 :(得分:0)

这也有效:

我刚刚更改为Grid

您还可以从下拉值中选择颜色并更新以代替&#39; black&#39;;

CodePen

答案 5 :(得分:0)

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

答案 6 :(得分:0)

以下代码现在可以使用了!!!

const test = () => {
const onClick = () => console.log('hi');

return (
<div onClick={onClick} aria-hidden="true">
  Content here
</div>
)};