我有一个像这样设置的React组件:
export default class FormDialog extends React.Component {
constructor(){
super();
this.state = {allowedToDelete: false};
}
onChange(event) {
if (event.target.value.match(this.targetName)) {
console.log("It's a match!");
this.state = {allowedToDelete: true};
console.log(this.state);
} else {
this.state = {allowedToDelete: false};
}
}
render() {
const { profile, deleteUser, handleDialogClose, ...other } = this.props;
this.targetName = `${profile.firstName} ${profile.lastName}`;
console.log({...other})
return (
<Dialog {...other}>
<DialogTitle id="form-dialog-title">Delete this user?</DialogTitle>
<DialogContent>
<DialogContentText>
allowedToDelete: {String(this.state.allowedToDelete)}
</DialogContentText>
<TextField
autoFocus
margin="dense"
id="name"
label="User's Full Name"
type="text"
fullWidth
onChange={this.onChange.bind(this)}
/>
</DialogContent>
<DialogActions>
<Button variant="outlined" onClick={this.handleDialogClose} color="primary">
Cancel
</Button>
<Button variant="outlined" onClick={this.deleteUser} disabled={!this.state.allowedToDelete} color="primary">
Delete User!
</Button>
</DialogActions>
</Dialog>
);
}
}
(我在这里使用material-ui的表单对话框组件)。
如上所述,提示用户输入要删除的配置文件的全名;如果名称匹配,则“删除用户!”按钮应变为禁用状态。
我的onChange()
事件正在运行,因为当我输入正确的名称时,我在控制台中看到It's a match!
,并且this.state
的日志显示了this.state.allowedToDelete === true
。
但是,我的渲染函数allowedToDelete: {String(this.state.allowedToDelete)}
和按钮的disabled={!this.state.allowedToDelete}
都保留为false
。
我在这里做错了什么?我是React的新手,我对状态的理解可能很困惑,但是我尝试使用直接附加到this
而不是state的变量来执行此操作,但这也不起作用...
答案 0 :(得分:2)
您需要致电setState
。您可以阅读有关in the react docs的信息。这就是告诉react组件触发生命周期以显示新状态的原因。
this.setState({allowedToDelete: false});