Что бы useEffect сработал один раз, только при активаций.
То как вы и сказали нужно передать пустой массив вторым аргументом.
useEffect(() => {
axios
.get("http://localhost:3001/api/score")
.then(response => {
if (response.data.ok) {
dispatchDataToState(response.data);
} else throw new Error("Server side error");
})
.catch(err => console.error(err));
}, []);
Думайте о втором аргументе как о зависимости для этого эффекта. Если одна из зависимостей изменилась с прошлого раза, эффект запустится снова.
Предупреждение как таковой не влияет на работу кода и функционал будет работать.
В вашем случае что бы избавиться от предупреждения, просто нужно добавить зависимость внутрь пустого массива.
Или можно просто отключить предупреждение
useEffect(() => {
// code
// eslint-disable-next-line react-hooks/exhaustive-deps
}, []);