【发布时间】: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 -
是的,这很简单:
<DashboardWidgetTitle widget={this.props.widget} isEditMode={this.props.isEditMode}/>isEditMode被设置为两个级别的状态对象。它没有被改变。 -
看起来您的
isEditMode没有正确传递。我会在渲染上记录它的价值。我的猜测是它未定义(未通过)并且!undefined是true。 -
这是你想要的吗:jsfiddle.net/69z2wepo/91532
-
是的,这也是我的第一个想法。输入根本不具有
disabled属性,而它不应该。输入确实允许焦点,在这种情况下,只是没有改变。最奇怪的部分是,如果我在输入时按住鼠标输入,我可以让它工作。我是
标签: javascript reactjs input