javascript - ReactJS中的通用按钮组件

标签 javascript reactjs

我开始使用 React,但我一直坚持这个示例。

计数器可以工作,但为什么 onClick 按钮不会更改处于事件状态的按键并呈现正确的按钮?

链接到CodePen

  const Button = ({label}) => (
    <button className="btn btn-primary">{label}</button>
);

const Counter = React.createClass({

    getInitialState: function () {
        return {
            counter: 0,
            active: false
        }
    },

    increment: function () {
        this.setState({
            counter: this.state.counter + 1
        })
    },

    change: function () {
       this.setState({
           active: true
       })
    },

    render: function () {
        return (
                <div>
                    <h1>Counter: {this.state.counter}</h1>
                    <button onClick={this.increment}>1+</button>}
                    {this.state.active ? 
                    <Button label="Sign OUT"/> :
                    <Button label="Sign in" onClick={this.change}/>}
                </div>
        )
    }
});

ReactDOM.render(<Counter/>, document.getElementById("root"))

最佳答案

因为您忘记在 Button 组件中定义 click 事件,请使用此:

const Button = (props) => (
    <button className="btn btn-primary" onClick={props.onClick}>{props.label}</button>
);

还有一件事,您还需要使用 signout 按钮定义点击事件,如下所示:

{this.state.active ? 
    <Button label="Sign OUT" onClick={this.change}/> : 
    <Button label="Sign in" onClick={this.change}/>
} 

change: function () {
    this.setState({
        active: !this.state.active
    })
}

检查工作示例:

jsfiddle:https://jsfiddle.net/mtbg3g59/

Codepen:http://codepen.io/anon/pen/WRLgpp

关于javascript - ReactJS中的通用按钮组件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42200084/

相关文章:

javascript - 二维数组javascript中的无限递归框

javascript - C#在页面加载完成后下载html字符串

javascript - react 触发无限请求

javascript - typescript / react 。错误类型 '{ key: number; }' 不可分配给类型 ILink(SFC 组件)

reactjs - 如何将 Prop 传递给某种类型的所有子代和孙代

xcode - 如何真正在 React Native 项目中进行团队合作?

Javascript从坐标数组中的某个坐标找到最远的坐标

java - Java与小程序之间的通信

javascript - Cryptojs Scala 到 JS 加密不起作用,但其他方式效果很好

reactjs - Next.js 动态路由就在索引之后