У меня есть интересный сценарий: у меня есть компонент реагирования, который поддерживает значение состояния, и я хочу объединить с ним следующий символ при нажатии клавиши или элемента HTML.
Проблема: При нажатии элемента HTML значение объединяется нормально, однако при нажатии клавиши значение переопределяется.
Я проверил значение с помощью useEffect, и оно обновляется но при нажатии другой клавиши значение становится пустым.
import { useCallback, useEffect, useState } from "react";
export function ValueTest() {
const [value, setValue] = useState("");
const keypress = (v: string) => {
setValue(value + v);
};
const keyUpHandler = useCallback((event) => {
event.preventDefault();
keypress(event.key);
}, []);
useEffect(() => {
document.addEventListener("keyup", keyUpHandler);
return () => {
document.removeEventListener("keyup", keyUpHandler, false);
};
}, [keyUpHandler]);
useEffect(() => {
console.log(value);
}, [value]);
return (
keypress("1")}
>
1
{value}
);
}
Подробнее здесь: https://stackoverflow.com/questions/798 ... oard-event
Правильно реагировать на обновление состояния с помощью события клавиатуры ⇐ Javascript
Форум по Javascript
1767937763
Anonymous
У меня есть интересный сценарий: у меня есть компонент реагирования, который поддерживает значение состояния, и я хочу объединить с ним следующий символ при нажатии клавиши или элемента HTML.
[b]Проблема:[/b] При нажатии элемента HTML значение объединяется нормально, однако при нажатии клавиши значение переопределяется.
Я проверил значение с помощью useEffect, и оно обновляется но при нажатии другой клавиши значение становится пустым.
import { useCallback, useEffect, useState } from "react";
export function ValueTest() {
const [value, setValue] = useState("");
const keypress = (v: string) => {
setValue(value + v);
};
const keyUpHandler = useCallback((event) => {
event.preventDefault();
keypress(event.key);
}, []);
useEffect(() => {
document.addEventListener("keyup", keyUpHandler);
return () => {
document.removeEventListener("keyup", keyUpHandler, false);
};
}, [keyUpHandler]);
useEffect(() => {
console.log(value);
}, [value]);
return (
keypress("1")}
>
1
{value}
);
}
Подробнее здесь: [url]https://stackoverflow.com/questions/79863949/react-state-update-properly-with-keyboard-event[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия