Ваш вариант будет работать точно также, единственное решение это вынести колбек за тело компонента
нет, как я написал выше ваш debounce будет срабатывать в холостую при перерендеринге, это легко проверить, если вы обернете debounce и выведите concole.log и начнете что-то вводить в поле. Получится, что будет производится работа в холостую, не очень круто, если мы думаем о производительности, хотя для примера выше это не критично. Тогда как в моем решении она будет вызвана лишь однажды