【发布时间】:2018-02-24 06:03:50
【问题描述】:
我正在尝试禁用基于几个状态的反应按钮。下面是我的代码的细分
constructor(props) {
super(props);
this.state = {
email: '',
pass: '',
disabled: true
}
this.handleChange = this.handleChange.bind(this);
this.handlePass = this.handlePass.bind(this);
}
非常自我解释的构造函数。禁用将随着状态的变化而改变。我的渲染方法看起来像这样
render() {
if(this.state.email && this.state.pass) {
this.setState({ disabled: false })
}
return (
<div className='container'>
<div className='top'></div>
<div className='card'>
<MuiThemeProvider>
<Card >
<div className='wrapper'>
<TextField
hintText="Email"
value={this.state.email} onChange={this.handleChange}
/><br/>
<TextField
hintText="Password"
type="password"
/><br/>
<div className='login-btn'>
<RaisedButton label="Login" primary={true}
disabled={this.state.disabled} />
</div>
</div>
</Card>
</MuiThemeProvider>
</div>
</div>
)
}
如您所见,我有 2 个文本字段,我正在使用以下方法处理数据更改
handleChange(e) {
this.setState({email: e.target.value});
}
handlePass(e) {
this.setState({pass: e.target.value});
}
现在我的按钮最初是禁用的,每次更改状态并重新渲染组件时,我都想检查状态更改并相应地启用按钮。所以我在考虑像这样使用生命周期方法
componentWillMount() {
if(this.state.pass && this.state.disabled) {
this.setState({disabled: false})
}
}
但是,这不起作用。当电子邮件和密码字段不为空时,按钮保持禁用状态。我不确定我做错了什么。
【问题讨论】:
-
这里我不太确定,但您有一个 RaisedButton 组件。这是一个有效的 html 按钮吗,因为据我所知只有按钮被禁用
-
@Paulquappe 有效;语法是React 的一部分。
标签: javascript reactjs reactive-programming