【问题标题】:React Input with disabledReact Input 禁用
【发布时间】:2018-04-27 22:25:13
【问题描述】:

我有一个从道具传播的禁用布尔值的输入。我发现设置了禁用的变量,即使它是真的我也无法输入输入。但是,如果我按住鼠标并在输入时按住它,我可以在输入中输入。

当我将组件渲染为受控和不受控时会发生这种情况。

修复它的唯一方法是删除disabled 或设置disabled={false}——但我需要它是可变的。

这是我的输入:

  class DashboardWidgetTitle extends React.Component {

    constructor(props) {
      super(props);
      this.state = {};
      this.state.title = props.widget.getTitle();
    }

    render () {
      return <input className="title"
                    value={this.state.title}
                    disabled={!this.props.isEditMode}
                    onChange={this._onInputChange.bind(this)}/>
    }

    _onInputChange(e) {
      logit("input change");
      this.setState({title: e.target.value});
    }

  }

谢谢!

编辑:额外信息--

  • 这用于ReactGridLayout 实现中的小部件。
  • 组件由一个小部件呈现,该小部件由反应网格布局的实现呈现,即“仪表板”。该仪表板具有 isEditMode 作为状态,该状态通过 Angular 中的切换在外部进行更改(我们在 Angular 中使用 React)。
  • 如果我切换标签并返回,焦点仍然存在。否则,每当我输入一个字母时,输入就会失去焦点。
  • 输入在不应该被禁用时并没有被禁用,它只是有焦点问题 - 但是删除 disabled 属性或将其设置为静态变量,问题不会仍然存在。
  • 当我将禁用开关切换为isEditMode 而不是!isEditMode 时,一切正常。似乎在 ReactGridLayout 的可拖动/调整大小的部分上有一个 onclick,这导致了一些问题。

【问题讨论】:

  • 你能显示你渲染的代码吗DashboardWidgetTitle
  • 是的,这很简单:&lt;DashboardWidgetTitle widget={this.props.widget} isEditMode={this.props.isEditMode}/&gt; isEditMode 被设置为两个级别的状态对象。它没有被改变。
  • 看起来您的isEditMode 没有正确传递。我会在渲染上记录它的价值。我的猜测是它未定义(未通过)并且!undefinedtrue
  • 这是你想要的吗:jsfiddle.net/69z2wepo/91532
  • 是的,这也是我的第一个想法。输入根本不具有disabled 属性,而它不应该。输入确实允许焦点,在这种情况下,只是没有改变。最奇怪的部分是,如果我在输入时按住鼠标输入,我可以让它工作。我是

标签: javascript reactjs input


【解决方案1】:

我的问题已在此处描述:https://github.com/STRML/react-grid-layout/issues/615

我自己的错误是研究不善。

【讨论】:

    猜你喜欢
    • 2020-11-23
    • 1970-01-01
    • 2021-09-28
    • 1970-01-01
    • 2021-06-19
    • 2016-11-19
    • 2023-03-28
    • 2018-09-22
    • 1970-01-01
    相关资源
    最近更新 更多