仅从一个字段中删除星号

时间:2019-06-11 09:34:21

标签: javascript reactjs

我有一个自定义组件,该组件从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即可带有此星号,但我的组件当前不允许个人使用

enter image description here

2 个答案:

答案 0 :(得分:1)

只需通过将required属性作为布尔值传递给组件即可使您的组件可自定义,然后在组件中使其动态:

<FormControl required={props.required}>
  // ... 
</FormControl>

因此,您现在可以将其与星号<SearchUsers required />一起使用,也可以不与<SearchUsers required={false} />一起使用

答案 1 :(得分:1)

在您的required组件中添加其他道具Search,然后将其用作FormControl的道具值:

<FormControl required={props.required} />