Я создаю поле ввода в React, которое выглядит следующим образом:
Когда нажимается 'x' (StyledCloseCircle
)текст будет очищен, а символ «х» должен исчезнуть.Символ 'x' в настоящее время отображается с javascript, когда поле ввода сфокусировано,
export const Search = React.forwardRef((props, ref) => {
const [isFocused, setFocus] = useState(false);
const [isHovered, setHover] = useState(false);
return (
<InputContainer
onMouseEnter={() => setHover(true)}
onMouseLeave={() => setHover(false)}
>
<StyledInput
onFocus={() => setFocus(true)}
onBlur={() => setFocus(false)}
isHovered={isHovered}
ref={ref}
{...props}
/>
{isFocused && !props.value && (
<StyledMagnifyingGlass
isHovered={isHovered}
isFocused={isFocused}
onClick={props.onSearch}
/>
)}
{isFocused && props.value && (
<StyledCloseCircle onClick={() => console.log("THIS DOES NOT FIRE")} />
)}
{!isFocused && (
<StyledMagnifyingGlass
isHovered={isHovered}
isFocused={isFocused}
onClick={props.onSearch}
/>
)}
</InputContainer>
);
});
Проблема заключается в том, что при нажатии на кнопку x ввод теряет фокус, что приводит к тому, что xудаляется при следующем рендеринге и не регистрирует событие click
.Однако он вызывает событие mousedown
.
Поэтому у меня два вопроса:
- Каков порядок операций при нажатии на «х», который приводитэто для регистрации
mousedown
но не click
? - Как мне добиться желаемого поведения?