reactjs - 如果条件在 React 中添加组件道具
问题描述
我有一个React Input 组件,如果条件为真,我希望它显示一个错误图标。目前,我通过一个if
条件来实现它,该条件在条件为真时呈现带有图标的组件,而在其他情况下则呈现另一个组件:
if (field_meta.error) {
return (
<FormControl fullWidth margin="normal">
<InputLabel style={{color: "red"}} htmlFor={field_meta.name}>{field_meta.title}</InputLabel>
<Input
id={field_meta.name}
defaultValue={field_meta.value? field_meta.value: ""}
onChange={this.handleChange}
margin="normal"
startAdornment={ // ***** This is the props that depends on the condition
<InputAdornment position="start">
<i style={{color: "red"}} className="zmdi zmdi-alert-circle zmdi-hc-fw"/>
</InputAdornment>
}
/>
<FormHelperText style={{color: "red"}}>{field_meta.error}</FormHelperText>
</FormControl>
)
} else {
return (
<FormControl fullWidth margin="normal">
<InputLabel htmlFor={field_meta.name}>{field_meta.title}</InputLabel>
<Input
id={field_meta.name}
defaultValue={field_meta.value? field_meta.value: ""}
onChange={this.handleChange}
margin="normal"
/>
</FormControl>
)
}
我认为必须有一种更有效的方法来执行此操作,而无需根据条件渲染两个完全不同的组件,可能仅通过调节包含特定道具的条件,但我找不到如何做到这一点。
解决方案
当然。您可以通过短路来做到这一点:
<FormControl fullWidth margin="normal">
<InputLabel style={field_meta.error && {color: "red"}} htmlFor={field_meta.name}>{field_meta.title}</InputLabel>
<Input
id={field_meta.name}
defaultValue={field_meta.value? field_meta.value: ""}
onChange={this.handleChange}
margin="normal"
startAdornment={ field_meta.error && (
<InputAdornment position="start">
<i style={{color: "red"}} className="zmdi zmdi-alert-circle zmdi-hc-fw"/>
</InputAdornment>)
}
/>
{field_meta.error && <FormHelperText style={{color: "red"}}>{field_meta.error}</FormHelperText>}
</FormControl>
推荐阅读
- android - Push API 如何在内部工作?
- php - Laravel 6+ Uniq id generation Only in number with Additional Logic
- ruby-on-rails - 后控制器需要后
- python - 使用 pynput 在随机位置自动单击鼠标(用于网络浏览器游戏)
- python - 在 powershell 中运行 python 文件
- java - 在 JSR 303 bean 验证单元测试中,如何检查违反了哪些约束
- clojure - Clojure 调用一系列函数并存储它们的返回值
- django - 如何通过 id 在 Django 中加入两个模型?
- vue.js - 更改网址后立即停止观看
- ios - 如何在 SwiftUI 中使用图像 CDN?