на реакте.
Чтобы задать стейт компоненту я использую хук useState
Например:
const [text, setText] = useState('');
<input value={text} onChange(e => setText(e.target.value)) />
после вызова setText, произойдет перерендер инпута, а в переменной text всегда будет текущее введенное значение
Теперь допустим я хочу подписаться на событие document в котором буду использовать эту переменную.
useEffect(() => {
const listener = (e) => {
e.preventDefault();
if (isHotkey("mod+Enter", e)) {
document.title = text;
}
}
document.addEventListener('keydown', listener);
return () => document.removeEventListener('keydown', listener);
}, [text]);
Теперь у меня всегда будет переподписка при изменении текста. Но по сути мне это не нужно, я бы хотел подписаться один раз и иметь в подписке доступ к переменной text независимо от рендера. Я пока приешл к дублированию в ref или использования библиотек стейта где есть метод getState, чтобы получить доступ const {text} = getState().
Может у кого-то есть другое решение этой проблемы?
https://codesandbox.io/s/vibrant-gould-dr8du?file=/src/App.js я пробовал)
https://codesandbox.io/s/crazy-tdd-eo1bu?file=/src/App.js Но вот если подписаться и там и там то это работает
Обсуждают сегодня