reactjs - 默认禁用按钮单击事件不会在 reactjs 上触发

标签 reactjs

我有默认情况下被禁用的按钮。但是当复选框被选中时,按钮将被启用,使用 ref 我启用按钮。按钮激活后,单击事件不会触发。如果没有默认禁用,按钮的点击事件就会被触发。

    class TodoApp extends React.Component {

        onChangeCheckBox(event) {
            if(event.target.checked) {
                this.actionButtonRef.disabled = "";
            }
            else {
                this.actionButtonRef.disabled = "disabled";

            }
        }  

        render() {
            return (
            <div>
                <input 
                    type="checkbox" 
                    ref={element => {
                        this.checkboxAllRef = element;
                    }}
                    onChange={event => this.onChangeCheckBox(event)}/> Checbox 
                <br />
                <button
                    type="button"
                    className="btn btn-danger" 
                    ref={element => {
                        this.actionButtonRef = element;
                    }}
                    onClick={event => {
                        alert("clicked");
                    }} 
                    disabled="disabled">Button</button>
            </div>
            )
        }
    }

    ReactDOM.render(<TodoApp />, document.querySelector("#app"))

here is jsfiddle

最佳答案

React 不允许手动更改 DOM 元素(实际上是说虚拟 DOM)。

您需要保持启用或禁用状态。并根据状态变化工作:

类构造器:

  constructor(props) {
    super(props);

    this.state = {
      checked: false
    };

    this.onChangeCheckBox = this.onChangeCheckBox.bind(this);
    this.onClickButton = this.onClickButton.bind(this);
  }

事件处理程序:
  onChangeCheckBox(e) {
    this.setState({
      checked: e.target.checked,
    });
  }
  onClickButton(e) {
    alert(e);
  }

渲染 JSX:
  render() {
    return (
      <div>
        <input
          type="checkbox"
          checked={this.state.checked}
          onChange={this.onChangeCheckBox}
        />
        <button
          type="button"
          disabled={!this.state.checked}
          onClick={this.onClickButton}>Click</button>
      </div>
    );
  }
}

这是一个 demo .

关于reactjs - 默认禁用按钮单击事件不会在 reactjs 上触发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50024811/

相关文章:

javascript - 在 React 中使用 react-router 4 和 styled-component 时,不应在 Router 外部使用 Route 或 withRouter()

javascript - 如何检测用户是否正在使用电视应用程序?

javascript - react : Flow: Import a local js file - cannot resolve issue module

javascript - 如何在 React JSX 中打印子字符串?

reactjs - 在 native react 中处理具有 onChangeText 事件属性的对象

reactjs - 如何将 hls.js 与 React 结合使用

javascript - React-Router:如果未通过身份验证则显示主页,如果在 "/"中通过身份验证则显示仪表板

javascript - 如何将 JSON 对象从快速服务器发送到下一个 js 页面?

javascript - 我对 React 和 TypeScript 中的这个简单组件感到困惑

javascript - Fetch 返回一个内部服务器错误,而 Postman 接受它