Я пытаюсь создать гибкий и повторно используемый компонент MUI v5 TextField, но не ясно, как установить по умолчанию endAdornment или startAdornment на InputProps в зависимости от условия.
Предполагается, что TextField имеет несколько состояний:
TextField
имеет ошибку, то endAdornment
следует добавить с определенной иконкойstartAdornment
следует добавить с определенной иконкойНа данный момент у меня есть только (и на самом деле я хочу, чтобы это работало так):
<StyledTextField
error = {true}
/>
<StyledTextField
someSearchProp = {true}
/>
Также я хочу сохранить возможность использовать TextField по умолчанию следующим образом:
<StyledTextField
InputProps = {{
startAdornment: (
<InputAdornment position = "start">
<SearchIcon />
</InputAdornment>
),
}}
/>
StyledTextField.tsx
const StyledTextField: React.FC<StyledTextFieldProps> = ({ ...props }) => (
<TextField
{...props}
InputProps = {{
endAdornment: (
<InputAdornment position = "end">
<InfoOutlinedIcon color = {'error'} />
</InputAdornment>
),
}}
/>
);
Ааа
Вы можете распространять реквизиты и добавлять новое значение в ключ InputProps.
Вот так:
const StyledTextField: React.FC<StyledTextFieldProps> = (props) => {
let textFieldProps = props
if (props.error){
textFieldProps = {...props,InputProps:{
startAdornment: (
<InputAdornment position = "start">
<SearchIcon />
</InputAdornment>
),
}}
delete textFieldProps.error
}else if (props.someSearchProp){
textFieldProps = {...props,InputProps:{
endAdornment: (
<InputAdornment position = "end">
<InfoOutlinedIcon color = {'error'} />
</InputAdornment>
)
}}
delete textFieldProps.someSearchProp
}
return ( <TextField
{...textFieldProps}
/>)
};
После присвоения значения я удаляю ошибку и некоторые свойства SearchProp, потому что они не являются реквизитами TextField и вызывают предупреждение в консоли