javascript - 根据 React 中的选定值更改按钮的颜色
问题描述
我是新手,react js.
我有一个普通表单,使用简单的 bootstrap 3 表单。在这里,我有两个选择
<form className="form-inline text-center row" role="form">
<div className="col-xs-4">
<div className="form-group col-xs-12">
<label className="control-label">company/project</label>
<select id="company" className="form-control" onChange={(event, newValue) => this.setState({ company: event.target.value, hasUserFilledCompany: true })}>
<option disabled selected value>None Selected</option>
<option>abc</option>
<option>pqr</option>
<option>xyz</option>
<option>cdcdc</option>
<option>abcd</option>
</select>
</div>
</div>
<div className="col-xs-4">
<div className="form-group col-xs-12">
<label>Select Technology</label>
<select id="Technology" className="form-control" onChange={(event, newValue) => this.setState({ Technology: event.target.value, hasUserFilledTech: true })}>
<option disabled selected value>None Selected</option>
<option>qwe</option>
<option>gahs</option>
<option>cdbcdbhcd</option>
<option>cdcdc</option>
<option>cdcbdc</option>
</select>
</div>
</div>
<div className="col-xs-4">
<div className="form-group col-xs-12" style={jobUpload}>
<div className="row">
<label>Job Description</label>
<button type="button" className={"btn " + ((this.state.hasUserFilledTech && this.state.hasUserFilledCompany) ? 'enable-Button' : 'jd-button')} onClick={(event) => this.createJob(event)}>Add/Paste</button>
<span style={or}>Or</span>
<button type="button" className="btn jd-button">Upload File</button>
</div>
</div>
</div>
</form>
现在,在这里,我想要做的是用户从选择中选择值然后按钮颜色将被更改并且它也将被启用。为此,我的解决方案是我在 select 上使用两个变量作为状态变量,如果这成为真的,那么我将条件类应用于此按钮。
这是有效的,但我认为这不是验证表单的正确解决方案。我怎样才能做到这一点?
解决方案
这就是你可以做到这一点的方法。一些好的做法是如何onChange
在 select 中实现函数。你在那里重复一下。注意我是如何在onChange
函数中解构事件的。而且您不需要另一个变量,您只需检查!!company && company.length > 0
.
这是演示https://codesandbox.io/s/30yj7mrq4q
class App extends React.Component {
state = {
company: "",
tech: ""
}
onChange = ({ target: { name, value } }) => {
this.setState({ [name]: value });
}
render() {
const { tech, company } = this.state;
const enabled = (!!tech && tech.length > 0) && (!!company && company.length > 0)
return (
<div>
<div>
<label> Company </label>
<select name="company" onChange={this.onChange}>
<option disabled selected value>None Selected</option>
<option> Google </option>
<option> Facebook </option>
<option> Microsoft </option>
</select>
</div>
<div>
<label> Tech </label>
<select name="tech" onChange={this.onChange}>
<option disabled selected value>None Selected</option>
<option> React </option>
<option> Angular </option>
<option> Vue </option>
</select>
</div>
<div>
<button className={`btn ${enabled ? "enabled" : "disabled"} `} disabled={!enabled}>Upload File</button>
</div>
</div>
)
}
}
推荐阅读
- html - 如何设置 max="variable value" 的输入类型日期值
- amazon-web-services - 不想将额外文件从 AWS Elastic Search 上传到 S3 存储桶
- android - createdurablesubscriber 没有收到持久性消息 activemq
- azure - 无法通过 ARM 模板在 Azure 中的不同 SQL Server 上创建多个同名数据库
- visual-studio-2015 - Visual Studio 2015 中的 NuGet 配置
- python - 如何将数据帧迭代地绘制为子图?
- vba - 通过 Outlook 中的 VBA 为手动标记的电子邮件(带提醒)发送电子邮件提醒
- python - Flask restplus SQL 查询输出格式
- python - 在 H2o 中计算 MAPE:错误:提供的列类型 POSIXct 未知
- java - 会话超时延长请求和响应之间的延迟