Как зарегистрировать событие с помощью ловушек useEffect?

В Java все находится в форме класса.

Если вы хотите использовать любой объект, тогда у вас есть две фазы:

  1. Объявить
  2. Инициализация

Пример:

  • Объявление: Object a;
  • Инициализация: a=new Object();

То же самое для концепции массива

  • Объявление: Item i[]=new Item[5];
  • Инициализация: i[0]=new Item();

Если вы не дают секцию инициализации, тогда возникает NullpointerException.

11
задан John Kennedy 8 April 2019 в 12:25
поделиться

1 ответ

Лучший способ реализовать такие сценарии - это посмотреть, что вы делаете в обработчике событий. Если вы просто устанавливаете состояние с использованием предыдущего состояния, лучше всего использовать шаблон обратного вызова и регистрировать прослушиватели событий только при первоначальном монтировании. Если вы не используете callback pattern ( https://reactjs.org/docs/hooks-reference.html#usecallback ), ссылка на слушателей вместе с ее лексической областью используется слушателем событий, но новая функция создается с обновленным закрытием при новом рендере, и, следовательно, в обработчике вы не сможете перейти в обновленное состояние

const [userText, setUserText] = useState('');

  const handleUserKeyPress = useCallback(event => {
    const { key, keyCode } = event;

    if (keyCode === 32 || (keyCode >= 65 && keyCode <= 90)) {
      setUserText(prevUserText => `${prevUserText}${key}`);
    }
  }, []);

  useEffect(() => {
    window.addEventListener('keydown', handleUserKeyPress);

    return () => {
      window.removeEventListener('keydown', handleUserKeyPress);
    };
  }, [handleUserKeyPress]);

  return (
    <div>
      <h1>Feel free to type!</h1>
      <blockquote>{userText}</blockquote>
    </div>
  );
0
ответ дан Shubham Khatri 8 April 2019 в 12:25
поделиться
Другие вопросы по тегам:

Похожие вопросы: