javascript - 更新状态在方法的返回语句中没有用
问题描述
我的渲染函数中有一个按钮,onClick 调用了一个方法,该方法显示一个带有输入文本框和按钮的简单表单的弹出窗口。问题是如果输入文本框为空,我希望禁用此按钮。
我尝试在状态中设置一个变量“名称”并使用它。甚至认为当用户在输入文本框中进行一些更改时状态值正在更新,但我无法使用这个更新的值来启用或禁用按钮。
render(){
return(
<button type='button' onClick={this.createUser} />
);
}
private createUser = (e) => {
return (
<div>
<input onChange={event => this.setState({name : event.target.value})}></input>
<button disabled={!this.state.name}>Create</button>
</div>
);
}
解决方案
试试这样。
class Application extends React.Component {
state = {
name: '',
show: false,
};
handlePopup = (show) => {
this.setState({show});
}
handleChangeText = (e) => {
this.setState({name: e.target.value});
}
renderPopup = (value, isVisible) => {
if(isVisible)
return (
<div>
<input value={value} onChange={this.handleChangeText} />
<button disabled={!value} onClick={(e) => this.handlePopup(false)} >Create</button>
</div>
);
}
render(){
const { show, name } = this.state;
return(
<div>
<button type='button' onClick={(e) => this.handlePopup(true)}>Click here</button>
{this.renderPopup(name, show)}
<div>{name}</div>
</div>
);
}
}
React.render(<Application />, document.getElementById('app'));
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/0.13.0/react.min.js"></script>
<div id="app"></div>
推荐阅读
- python - 保护通过 MSAL 验证的 Flask 应用程序中嵌入的 Dash 应用程序的视图
- chromecast - Chromecast CAF 接收器:有没有办法在 CAF 接收器中以编程方式跳过当前正在播放的媒体(不是来自发件人)
- typescript - 防止条件分支中的 Typescript 变窄
- javascript - JavaScript 按百分比为关键帧设置动画
- parallel-processing - 使用 MPI_Scatter 分散数组
- google-cloud-platform - 如何确保 gsutil 复制不使用外部 Internet?
- kubernetes - Kubernetes,如何通过互联网公开家庭集群 ip
- mysql - 无法从 App Engine 中的 Node JS 连接到 Cloud MySQL
- c++ - 在 Windows 上共享 OpenGL 上下文
- wordpress - “volumes”如何用 docker-compose 覆盖 docker 镜像的原始文件?