Rozumiem, dlaczego componentDidMountjest to odpowiednie dla wszystkiego, co wymaga dostępu do DOM, ale żądanie AJAX niekoniecznie lub zwykle tego wymaga.
Co daje?
Rozumiem, dlaczego componentDidMountjest to odpowiednie dla wszystkiego, co wymaga dostępu do DOM, ale żądanie AJAX niekoniecznie lub zwykle tego wymaga.
Co daje?
Odpowiedzi:
componentDidMountdotyczy skutków ubocznych. Dodawanie detektorów zdarzeń, AJAX, mutowanie DOM, itp.
componentWillMountrzadko się przydaje; szczególnie jeśli zależy Ci na renderowaniu po stronie serwera (dodanie detektorów zdarzeń powoduje błędy i wycieki oraz wiele innych rzeczy, które mogą pójść źle).
Mówi się o usuwaniu componentWillMountz komponentów klasy, ponieważ służy to temu samemu celowi, co konstruktor. Pozostanie na createClasskomponentach.
componentWillMount? Naprawdę nie widzę różnicy.
componentWillMountzostanie wykonane na renderowaniu po stronie serwera. Gdybyś używał, componentDidMountto byłby wykonywany tylko po stronie klienta. W rezultacie umieszczanie rzeczy, componentWillMountktóre wykonują zewnętrzne interakcje lub są powiązane ze zdarzeniami itp., Nie jest dobrym pomysłem. Jeśli nie planujesz renderować swoich komponentów na serwerze, nadal nie jest to dobry pomysł tylko ze względu na potencjalną przenośność kodu. To wszystko jest poza głównym powodem, dla którego jest zły, co zostało wyjaśnione w odpowiedzi @daniula.
Na początku też miałem ten sam problem. Postanowiłem spróbować wysyłać prośby, componentWillMountale kończy się to różnymi drobnymi problemami.
Wyzwalałem renderowanie, gdy połączenie Ajax zakończyło się z nowymi danymi. W pewnym momencie renderowanie komponentu zajęło więcej czasu niż uzyskanie odpowiedzi z serwera i w tym momencie wywołanie zwrotne ajax wyzwalało renderowanie na niezmontowanym komponencie. Jest to rodzaj skrajnego przypadku, ale prawdopodobnie jest ich więcej, więc bezpieczniej jest się trzymać componentDidMount.
componentWillMount, więc nadal powinieneś używać go componentDidMountdo wywołań Ajax.
setStatekonstruktora komponentu i nie masz możliwości określenia, kiedy wywołanie AJAX się zakończy. twitter.com/dan_abramov/status/576453138598723585
Zgodnie z dokumentacją ustawienie stanu na componentWillMountnie spowoduje ponownego renderowania. Jeśli wywołanie AJAX nie blokuje i zwracasz Promiseaktualizację stanu składnika po pomyślnym zakończeniu, istnieje szansa, że odpowiedź nadejdzie po wyrenderowaniu składnika. Ponieważ componentWillMountnie powoduje ponownego renderowania, nie będziesz mieć oczekiwanego zachowania, jakim jest renderowany komponent z żądanymi danymi.
Jeśli użyjesz którejkolwiek z bibliotek flux, a żądane dane trafią do sklepu, do którego jest podłączony komponent (lub dziedziczą z podłączonego komponentu), nie będzie to problem, ponieważ odbiór tych danych najprawdopodobniej zmieni właściwości ostatecznie.
componentWillMountnie wyzwala ponownego renderowania tylko dlatego, że przed pierwszym renderowaniem zdefiniowano nowy stan. Ale jeśli setStatezostanie wywołana w wywołaniu zwrotnym AJAX, z całą pewnością zostanie wywołana po pierwszym renderowaniu i spowoduje ponowne renderowanie.
componentWillMountzakończy się niepowodzeniem, biorąc pod uwagę, że komponent ... nie został zamontowany.