当前位置: 首页 > 面试题库 >

如何在React.js中禁用按钮

乔丁雨
2023-03-14
问题内容

我有这个组成部分:

import React from 'react';

export default class AddItem extends React.Component {

add() {
    this.props.onButtonClick(this.input.value);
    this.input.value = '';
}


render() {
    return (
        <div className="add-item">
            <input type="text" className="add-item__input" ref={(input) => this.input = input} placeholder={this.props.placeholder} />
            <button disabled={!this.input.value} className="add-item__button" onClick={this.add.bind(this)}>Add</button>
        </div>
    );
}

}

我希望在输入值为空时禁用按钮。但是上面的代码不起作用。它说:

add-item.component.js:78未捕获的TypeError:无法读取未定义的属性“值”

指向disabled={!this.input.value}。我在这里怎么做错了?我猜测render执行方法时可能尚未创建ref
。如果是,那么解决方法是什么?


问题答案:

使用refs不是最佳实践,因为它直接读取DOM,最好使用React的state。另外,您的按钮不会更改,因为该组件不会重新渲染并保持其初始状态。

每次输入字段更改时,您都可以将其setStateonChange事件侦听器一起使用以再次呈现组件:

// Input field listens to change, updates React's state and re-renders the component.
<input onChange={e => this.setState({ value: e.target.value })} value={this.state.value} />

// Button is disabled when input state is empty.
<button disabled={!this.state.value} />

这是一个工作示例:

class AddItem extends React.Component {

  constructor() {

    super();

    this.state = { value: '' };

    this.onChange = this.onChange.bind(this);

    this.add = this.add.bind(this);

  }



  add() {

    this.props.onButtonClick(this.state.value);

    this.setState({ value: '' });

  }



  onChange(e) {

    this.setState({ value: e.target.value });

  }



  render() {

    return (

      <div className="add-item">

        <input

          type="text"

          className="add-item__input"

          value={this.state.value}

          onChange={this.onChange}

          placeholder={this.props.placeholder}

        />

        <button

          disabled={!this.state.value}

          className="add-item__button"

          onClick={this.add}

        >

          Add

        </button>

      </div>

    );

  }

}



ReactDOM.render(

  <AddItem placeholder="Value" onButtonClick={v => console.log(v)} />,

  document.getElementById('View')

);


<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='View'></div>


 类似资料:
  • 问题内容: 我有angularJS 1.5.0-rc.2 我在互联网上发现可以使用该指令 但这不会禁用按钮。 我试过的 在我的控制器中,loaded定义为$ scope.loaded = false。 如何禁用按钮?谢谢 问题答案: 仅当表达式为 true时, 该按钮才会被禁用。

  • 所以我的问题是我该怎么做?这似乎是一个非常简单的需求,但我在文档中找不到任何关于如何执行的内容。 多谢了。

  • 我在Java中的ButtonGroup中有四个JRatioButton。前两个已启用,另两个已禁用。如果选择了一个特定的JRatioButton,我需要启用两个禁用的JRatioButton。 我试图找到按钮的状态并启用禁用的按钮,显然我找到了禁用状态的按钮,但没有更改该状态。 我得到了禁用按钮的文本,但我不能禁用它们。 需要帮忙吗?谢谢!

  • 问题内容: 在Swing中,我们可以禁用这样的按钮: 无论如何,使用JavaFX Button可以做到这一点吗?用户只能按一次按钮。 问题答案: 当然。只有相关 属性具有相反的语义,并称为。这意味着您可以使用(not )和。由于它是JavaFX属性,因此您还可以将侦听器附加到。 在http://docs.oracle.com/javafx/2/api/javafx/scene/Node.html#

  • 在Swing中,我们可以禁用如下按钮: 有什么方法可以用JavaFX按钮做到这一点吗?用户应该只能按一次按钮。

  • 我不知道如何使Tkinter变灰。 我试着使用,但它不起作用,我得到一个错误,说 _特金特。TclError:错误选项“-enable”:必须是-column、-columnspan、-in、-ipadx、-ipady、-padx、-pady、-row、-rowspan或-sticky 如何临时禁用?