Использование useRef для текстового поля для обработки внешнего щелчка не работает - функциональный компонент React

я просто даю минимальный код, чтобы рассказать о моей проблеме, с которой сейчас сталкиваюсь

У меня есть текстовое поле

который дается как

<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 и компонента, но для текстового поля, не уверен

Любая помощь будет высоко оценена

Этот код работает, можете ли вы воспроизвести проблему в песочнице, как ожидалось? codeandbox.io/s/react-template-forked-njj1z?file=/index.js

Dennis Vash 30.03.2021 13:00
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Навигация по приложениям React: Исчерпывающее руководство по React Router
Навигация по приложениям React: Исчерпывающее руководство по React Router
React Router стала незаменимой библиотекой для создания одностраничных приложений с навигацией в React. В этой статье блога мы подробно рассмотрим...
Массив зависимостей в React
Массив зависимостей в React
Все о массиве Dependency и его связи с useEffect.
0
1
24
1

Ответы 1

Ниже приведен фрагмент кода функции для обработки внешнего щелчка.

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}/>;
...

Вы должны использовать похожий код, чтобы он работал.

Другие вопросы по теме