Если строки, указанные вами в теле компонента, будут вызываться не только каждый раз, когда пользователь посещает ваше приложение, но и каждый раз, когда компонент выполняет рендеринг.
Для поведения, которое вы ищете, Вы должны загрузить значение и установить его в 0, если оно не существует. Это следует делать и за пределами вашего компонента.
Также обратите внимание, что localStorage хранит только строки, поэтому вам нужно будет проанализировать то, что вы извлекаете из него.
const storedValue = localStorage.getItem('timesVisited')
// localStorage only stores string
const visitsCount = storedValue ? parseInt(storedValue) : 0
function myComponent = () => {
useEffect(() => {
if(visitsCount >= 5){
return
}
localStorage.setItem('timesVisited', ++visitsCount);
}, [])
}