Лучшее решение повесить обработчик на событие?
Все, что находится в теле функции Example будет выполняться каждый render. Отличие второго способа лишь в том, что он содержит дополнительные операции. Причем, создание хандлера через билдер, в данном случае, абсолютно бессмысленная операция. Подобные приемы уместны если этот билдер где-то переиспользуется и определен за пределами компонента.
Если хандлер передается в другой React компонент, то имеет смысл использовать хук useCallback. В вашем случае в этом нет смысла, так как хандлер передается в нативный элемент.
Кем "не рекомендуется"?
Чтобы решать проблему нужно убедиться что есть проблема и четко сформулировать ее.
Если вы решаете проблему что код не подходит под какие-то рекомендации, то это одно, а если вы решаете проблемы с памятью во время выполнения приложения это совсем другое.
 Во втором случае у вас на руках должны быть данные полученные в результате анализа того как ваше приложение работает.
Подавляющее большинство render функций вызывается на самом деле достаточно редко чтобы это имело значение.