функции:
- updateMetricsBy: изменяет локальный стейст который будет потом использован для сохранения на сервер
- saveMetrics: функция которая сохраняет этот стейт на сервер
Но почему-то saveMetrics получает старое значение metrics (из стейта), даже не старое а просто предыдущее (если нажать два раза на кнопку можно увидеть).
Вот codesandbox: https://codesandbox.io/s/spring-browser-nynxp7?file=/src/App.js
если в строке 40 вместо if (cb) cb(); написать if (cb) saveMatrics(); то всё работает. видимо в дебаунсер передаётся "старый" коллбек, который был создан до обновления стейта
обернул useDebouncedCallback в useCallback с депсом от saveMetrics и всё заработало: const saveTasksDebounced = useCallback(useDebouncedCallback( (data, cb) => { console.log("Saved [tasks]", data); if (cb) cb(); }, 2000 // Debounced interval is 2000 ms ), [saveMetrics]);
Обсуждают сегодня