Думаю, я получил то, что вы пытаетесь достичь sh. Во-первых, вы не можете определить ловушку внутри функции. Что вы можете сделать, так это запустить обратный вызов эффекта после изменения хотя бы одной из его зависимостей.
useEffect(() => {
// run code whenever deps change
}, [deps])
Хотя для этой конкретной проблемы (из того, что я понял из вашего описания), я бы go что-то вроде это:
export default function Academics() {
let [currentOption, setCurrentOption] = useState()
function handleSelectOption(i) {
return () => setCurrentOption(i)
}
function clearSelectedOption() {
return setCurrentOption()
}
return (options.map((option, i) =>
<button
onClick={handleSelectOption(i)}
className={i === currentOption ? 'option option--highlight' : 'option'}
onBlur={clearSelectedOption}
></button>
))
}