reactjs - 如何重构常见的 React 组件?
问题描述
我正在设计这样的必需品 TextField
const styles = theme => ({
labelAsterisk: {
color: "red"
},
cssLabel: {
color: "orange"
},
cssRequired: {
"&:before": {
borderBottom: "2px solid orange"
}
},
});
<TextField
id="requiredField"
label="Required Field"
value="Custom Text"
required
InputLabelProps={{
classes: {
root: classes.cssLabel
},
FormLabelClasses: {
asterisk: classes.labelAsterisk
}
}}
InputProps={{
classes: {
underline: classes.cssRequired
}
}}
margin="normal"
/>
我的表单中有很多这些必填字段,并且希望将其标准化,而不是复制和粘贴大块代码。
重构它的最佳方法是什么,以便我只需要指定id
,label
并且value
每次使用它?
我要延长TextField
吗?
创建一个扩展的新组件React.Component
?
使用函数还是常数?
解决方案
以下是定义自定义 TextField 组件的方式:
const RequiredTextField = ({id, label, value}) => (
<TextField
id={id}
label={label}
value={value}
required
InputLabelProps={{
classes: {
root: classes.cssLabel
},
FormLabelClasses: {
asterisk: classes.labelAsterisk
}
}}
InputProps={{
classes: {
underline: classes.cssRequired
}
}}
margin="normal"
/>
)
以下是您将如何使用它:
<RequiredTextField id="some-id" label="some-label" value="some-value">
推荐阅读
- python - 无法将字符串转换为浮点数:“德克萨斯州里奇兰山附近需要温暖的中心庇护所,请致电”
- c# - 使用 Flurl 的 OnError 检查 ASP.NET Core Web API 中的自定义响应标头
- python - xml.etree.ElementTree:如何替换“innerHTML”?
- php - 自定义 buddypress 导航菜单选项卡
- terraform - 通过 Terraform 部署 ARM 模板中的 SecureString 是否每次都更新到位?
- javascript - 检查用户检查了哪些值
- blazor - 注销按钮在剃须刀中不起作用 - 它不会转到身份/帐户/注销
- google-sheets - 在 Google 协作平台上发布 Google 表格工作表的权限问题
- ibm-midrange - 如何在 as400 中编译使用 RPG3 上的替换文件的程序?
- c# - 由于未处理的异常,该进程被终止。异常信息:System.Configuration.ConfigurationErrorsException