我有一个自定义组件,该组件从API接收值,然后将其显示给用户,但是在此组件中,我给了一个“ required”标志,为标签加星号,但是我只希望看到一个字段下方有一个星号,而不是同时出现。
<Grid item xs={12} sm={6}>
<SearchUsers
name="primaryOfficerId"
label="PO Responsible"
id="primaryOfficerId"
onSelect={change.bind(null, 'primaryOfficerId')}
error={touched.primaryOfficerId && Boolean(errors.primaryOfficerId)}
/>
</Grid>
<Grid item xs={12} sm={6}>
<SearchUsers
name="supportOfficerId"
label="Support Officer"
id="supportOfficerId"
onSelect={change.bind(null, 'supportOfficerId')}
/>
</Grid>
现在是我的自定义组件
const Search = (props) => {
const [data, setData] = useState([]);
const [select, setSelect] = useState(0);
const { type: TYPE, name: NAME, label: LABEL, onSelect, filter } = props;
const applyFilter = (data) => {
let result = data;
if (filter) {
result = filter(data);
}
return result;
};
useEffect(() => {
getLookupData(TYPE)
.then((response) => {
setData(response);
})
.catch((error) => {
if (error === HttpStatus.NOT_FOUND) {
setData([]);
} else {
throw error;
}
});
}, [TYPE]);
const options = applyFilter(data).map((item) => (
<MenuItem value={item.id} key={item.id}>
{item[NAME]}
</MenuItem>
));
const handleChange = (event) => {
setSelect(event.target.value);
onSelect && onSelect(event);
};
const { classes } = props;
return (
<FormControl required className={classes.formControl} id={NAME} error={props.error}>
<FormControlLabel control={<InputLabel htmlFor={NAME}>{LABEL}</InputLabel>} />
<Select
name={TYPE}
value={select}
onChange={handleChange}
disabled={props.disabled || options.length === 0}
input={<Input name={TYPE} id={NAME} />}
>
<MenuItem value="">
<em>None</em>
</MenuItem>
{options}
</Select>
</FormControl>
);
};
在下面您可以看到我的问题的图片,PO和负责任的都有一个星号。我只需要PO即可带有此星号,但我的组件当前不允许个人使用
答案 0 :(得分:1)
只需通过将required
属性作为布尔值传递给组件即可使您的组件可自定义,然后在组件中使其动态:
<FormControl required={props.required}>
// ...
</FormControl>
因此,您现在可以将其与星号<SearchUsers required />
一起使用,也可以不与<SearchUsers required={false} />
一起使用
答案 1 :(得分:1)
在您的required
组件中添加其他道具Search
,然后将其用作FormControl
的道具值:
<FormControl required={props.required} />