简体   繁体   English

仅从一个字段中删除星号

[英]Remove asterisk from only one field

I have a custom component that takes in values from an API and then displays them to a user, however within this component I give a 'required' flag to give an asterisk to the label, however I only want one field as seen below to have an asterisk not both as is currently happening. 我有一个自定义组件,该组件从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>

And now my custom component 现在我的自定义组件

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>
);
};

Below you can see an image of my problem, both PO, and So responsible have an asterisk. 在下面,您可以看到我的问题的图片,PO和负责任的都有一个星号。 I need only PO to have this asterisk but my component does not currently allow for individuals 我只需要PO即可带有此星号,但我的组件当前不允许个人使用

在此处输入图片说明

Simply make your component customizable by passing it a required prop as boolean then in your component make it dynamic : 只需将组件作为布尔值传递给required道具,即可使组件可自定义,然后在组件中使其动态:

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

So now you can use it with an asterisk <SearchUsers required /> or without <SearchUsers required={false} /> 因此,现在您可以使用带星号的<SearchUsers required />或不使用<SearchUsers required={false} />

required其他属性添加到Search组件,然后将其用作FormControl值:

<FormControl required={props.required} />

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM