В Java все находится в форме класса.
Если вы хотите использовать любой объект, тогда у вас есть две фазы:
Пример:
Object a;
a=new Object();
То же самое для концепции массива
Item i[]=new Item[5];
i[0]=new Item();
Если вы не дают секцию инициализации, тогда возникает NullpointerException
.
Лучший способ реализовать такие сценарии - это посмотреть, что вы делаете в обработчике событий. Если вы просто устанавливаете состояние с использованием предыдущего состояния, лучше всего использовать шаблон обратного вызова и регистрировать прослушиватели событий только при первоначальном монтировании. Если вы не используете 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>
);