Нужно залогировать данные при обработке клика, нормально ли делать так:
const [isOpen, setIsOpen] = useState(false);
const onOpen = useCallback(() => {
setIsOpen(open => {
// тут какой-нибудь синхронный вызов, для отправки/сохранения данных
return !open;
});
}, []);
Понимаю, можно использовать
useEffect
с зависимостью от
isOpen
, но мне нужно отправлять данные только после клика, useEffect отработает всегда
Сейчас не уверен, что это правда хорошая практика, выполнять какой-то вспомогательный код в лямбде setState.
Временно сделал в-лоб:
useCallback(() => {
if (isOpen) {
// logger.send(false); и еще пару строк
setIsOpen(false);
} else {
// logger.send(true); // и еще пару строк
setIsOpen(true);
}
ну или:
logger.send(isOpen);
setIsOpen(!isOpen); // выглядит не надежно
}, [isOpen]);