Взгляните на useEffect
крючок. Это то, что вы используете для побочных эффектов.
https://reactjs.org/docs/hooks-effect.html
Вот пример того, как вызвать API из вашего компонента и отобразить данные:
import ReactDOM from "react-dom";
import React, { useState, useEffect } from "react";
import axios from "axios";
function SearchResults() {
const [data, setData] = useState(null);
useEffect(() => {
function getFetchUrl() {
return "https://hn.algolia.com/api/v1/search?query=react";
}
async function fetchData() {
console.log("asdasd");
const result = await axios(getFetchUrl());
setData(result.data);
}
fetchData();
}, []);
return <div>{JSON.stringify(data)}</div>;
}
ReactDOM.render(<SearchResults />, document.getElementById("root"));
Я частично взял этот код из overreacted.io, я настоятельно рекомендую вам прочитать эту удивительную статью о useEffect
hook: https://overreacted.io/a-complete-guide-to-useeffect/
Относительно useReducer
, это в основном useState
на стероидах. Он позволяет вам выполнять более сложные операции с состоянием, но на самом деле большой разницы нет.
В случае, если вы хотите, чтобы состояние было общим для разных компонентов, вы можете использовать useContext
, но это действительно не связано с тем, как работают побочные эффекты.
---- о редуксе:
Я просто хочу также прокомментировать, что переход на использование Api + хуков React Context для замены избыточности в вашем приложении может быть полезен, если вы просто используете его для передачи данных, например, во вложенные компоненты. Но если вам нужны все великолепные инструменты, промежуточное ПО, devtools и т. Д., Redux по-прежнему отличный выбор, даже с хуками, они не являются взаимоисключающими.
См:
https://blog.isquaredsoftware.com/2019/03/presentation-state-of-redux/
конкретно
https://blog.isquaredsoftware.com/presentations/2019-03-state-of-redux/#/10
https://blog.isquaredsoftware.com/presentations/2019-03-state-of-redux/#/11