Ta dyskusja trwała już jakiś czas, a odpowiedź @Alexander T. była dobrym przewodnikiem do naśladowania dla nowszych React, takich jak ja. I podzielę się kilkoma dodatkowymi wiedzą na temat wielokrotnego wywoływania tego samego API w celu odświeżenia komponentu. Myślę, że jest to prawdopodobnie powszechny problem, z którym nowicjusz może napotkać na początku.
componentWillReceiveProps(nextProps)z oficjalnej dokumentacji :
Jeśli chcesz zaktualizować stan w odpowiedzi na zmiany właściwości (na przykład, aby go zresetować), możesz porównać this.props i nextProps i wykonać przejścia stanu za pomocą this.setState () w tej metodzie.
Możemy wywnioskować, że tutaj jest miejsce, w którym obsługujemy właściwości z komponentu nadrzędnego, mamy wywołania API i stan aktualizacji.
Bazuj na przykładzie @Alexander T.:
export default class UserList extends React.Component {
constructor(props) {
super(props);
this.state = {person: []};
}
componentDidMount() {
this.UserList(this.props.group);
}
componentWillReceiveProps(nextProps) {
let group = nextProps.group;
this.UserList(group);
}
UserList(group) {
$.getJSON('https://randomuser.me/api/' + group)
.then(({ results }) => this.setState({ person: results }));
}
render() {
return (...)
}
}
Aktualizacja
componentWillReceiveProps() zostanie wycofany.
Oto tylko niektóre metody (wszystkie w Doc ) w cyklu życia, które moim zdaniem byłyby związane z wdrażaniem API w ogólnym przypadku:

Odnosząc się do powyższego schematu:
Wdróż interfejs API w componentDidMount()
Właściwy scenariusz wywołania API jest taki, że zawartość (z odpowiedzi API) tego komponentu będzie statyczna, componentDidMount()uruchamiana tylko raz podczas montowania komponentu, nawet nowe właściwości są przekazywane z komponentu nadrzędnego lub mają działania do wykonania re-rendering.
Komponent sprawdza różnicę, aby ponownie renderować, ale nie montować ponownie .
Cytat z doc :
Jeśli chcesz załadować dane ze zdalnego punktu końcowego, jest to dobre miejsce na utworzenie wystąpienia żądania sieciowego.
- Wdróż interfejs API w
static getDerivedStateFromProps(nextProps, prevState)
Powinniśmy zauważyć, że istnieją dwa rodzaje aktualizacji komponentów , setState() w obecnym komponencie nie spowodowałoby to wyzwolenia tej metody, ale ponowne renderowanie lub nowe właściwości z komponentu nadrzędnego tak. Mogliśmy się dowiedzieć, że ta metoda również strzela podczas montażu.
Jest to właściwe miejsce na wdrożenie API, jeśli chcemy użyć obecnego komponentu jako szablonu, a nowe parametry API to właściwości pochodzące z komponentu nadrzędnego .
Otrzymujemy inną odpowiedź z API i zwracamy statetutaj nową , aby zmienić zawartość tego komponentu.
Na przykład:
Mamy listę rozwijaną dla różnych samochodów w komponencie nadrzędnym, ten komponent musi wyświetlać szczegóły wybranego.
- Wdróż interfejs API w
componentDidUpdate(prevProps, prevState)
W odróżnieniu od static getDerivedStateFromProps()tej metody jest wywoływana natychmiast po każdym renderowaniu, z wyjątkiem renderowania początkowego. Moglibyśmy wywołać API i renderować różnicę w jednym komponencie.
Rozszerz poprzedni przykład:
Komponent pokazujący szczegóły samochodu może zawierać listę serii tego samochodu, jeśli chcemy sprawdzić wersję produkcyjną z 2013 roku, możemy kliknąć lub wybrać lub ... element listy, który będzie prowadził jako pierwszy, setState()aby to odzwierciedlić zachowanie (takie jak podświetlanie pozycji listy) w tym komponencie, aw dalszej części componentDidUpdate()wysyłamy nasze żądanie z nowymi parametrami (stan). Po otrzymaniu odpowiedzi setState()ponownie wykonujemy renderowanie innej zawartości szczegółów samochodu. Aby następujące elementy nie componentDidUpdate()powodowały pętli nieskończoności, musimy porównać stan, używając prevStatena początku tej metody, aby zdecydować, czy wyślemy API i wyrenderujemy nową zawartość.
Ta metoda naprawdę mogłaby być użyta tak jak w static getDerivedStateFromProps()przypadku rekwizytów, ale trzeba obsługiwać zmiany propspoprzez wykorzystanie prevProps. Musimy współpracować, componentDidMount()aby obsłużyć początkowe wywołanie API.
Cytat z doc :
... Jest to również dobre miejsce do wykonywania żądań sieciowych, o ile porównujesz obecne rekwizyty z poprzednimi ...
componentDidMountwywołaniu zwrotnym.