я просто даю минимальный код, чтобы рассказать о моей проблеме, с которой сейчас сталкиваюсь
У меня есть текстовое поле
который дается как
<input type = "text" ref = {inputRef}/>
а также
useEffect(() => {
document.addEventListener("click", handleClickOutside, false);
return () => {
document.removeEventListener("click", handleClickOutside, false);
};
}, []);
const handleClickOutside = event => {
if (inputRef.current && !inputRef.current.contains(event.target)) {
}
};
Но здесь возникает ошибка типа TypeError: inputRef.current.contains не является функцией
Не уверен, как проверить то же самое для текстового поля ввода
Здесь то, что я пытаюсь достичь, - это получить контроль, если пользователь щелкнет за пределами текстового поля ввода. Примечание: я сделал то же самое для div и компонента, но для текстового поля, не уверен
Любая помощь будет высоко оценена





Ниже приведен фрагмент кода функции для обработки внешнего щелчка.
const useOutsideClick = (ref, callback) => {
useEffect(() => {
const handleClickOutside = (event) => {
if (ref.current && !ref.current.contains(event.target)) {
callback();
}
};
document.addEventListener('mousedown', handleClickOutside);
return () => {
document.removeEventListener('mousedown', handleClickOutside);
};
}, [ref, callback]);
};
Использование внутри компонента:
...
const inputRef = useRef(null);
useOutsideClick(inputRef, callbackToHandleOutsideClick);
return <input type = "text" ref = {inputRef}/>;
...
Вы должны использовать похожий код, чтобы он работал.
Этот код работает, можете ли вы воспроизвести проблему в песочнице, как ожидалось? codeandbox.io/s/react-template-forked-njj1z?file=/index.js