У меня возникают проблемы с выбором способа вызова вызова API обязательно , например, при нажатии кнопки.
Я не уверен, каков правильный подход с крючками, потому что, кажется, существует более одного метода, но я не понимаю, какой подход является «лучшим» и возможные последствия.
Я нашел следующие примеры, которые достаточно просты и делают то, что я хочу:
Использование useEffect () со значением триггера
function SomeFunctionComponent() {
const [fakeData, setFakeData] = useState(0);
const [trigger, setTrigger] = useState(false);
async function fetchData() {
if (!trigger) return;
const newData = await someAPI.fetch();
setTrigger(false);
setFakeData(newData);
}
useEffect(() => {
fetchData();
}, [trigger]);
return (
<React.Fragment>
<p>{fakeData}</p>
<button onClick={() => setTrigger(!trigger)}>Refresh</button>
</React.Fragment>
);
}
Пример
Просто вызовите API и затем setState ()
function SomeFunctionComponent() {
const [fakeData, setFakeData] = useState(0);
async function fetchData() {
const newData = await someAPI.fetch();
setFakeData(newData);
}
return (
<React.Fragment>
<p>{fakeData}</p>
<button onClick={fetchData}>Refresh</button>
</React.Fragment>
);
}
Пример
Существуют также другие подходы, использующие useCallback (), но, насколько я понял, они полезны, чтобы избежать повторного рендеринга дочерних компонентов при передаче обратных вызовов, и эквивалентны второму примеру.
Я думаю, что подход useEffect полезен только тогда, когда что-то должно запускаться при монтировании компонентов и программно, но наличие того, что по сути является фиктивным значением для запуска побочного эффекта, выглядит многословно.
Просто вызов функции выглядит прагматично и достаточно просто, но я не уверен, разрешено ли компоненту функции выполнять побочные эффекты во время рендеринга.
Какой подход является наиболее идиоматичным и правильным, чтобы императивные вызовы с использованием хуков в React?