Oglądałem kurs Pluralsight na React i instruktor stwierdził, że rekwizytów nie należy zmieniać. Teraz czytam artykuł (uberVU / reaguj-przewodnik) na temat rekwizytów vs. stan i mówi
Zarówno rekwizyty, jak i zmiany stanu wyzwalają aktualizację renderowania.
W dalszej części artykułu jest napisane:
Rekwizyty (skrót od właściwości) to konfiguracja komponentu, w razie potrzeby jego opcje. Są otrzymywane z góry i niezmienne.
- Więc rekwizyty mogą się zmieniać, ale powinny być niezmienne?
- Kiedy należy używać rekwizytów, a kiedy stanu?
- Jeśli masz dane potrzebne komponentowi React, czy należy je przekazywać przez rekwizyty lub konfigurować w komponencie React przez
getInitialState
?
javascript
reactjs
skaterdav85
źródło
źródło
Odpowiedzi:
Rekwizyty i stan są powiązane. Stan jednego komponentu często staje się rekwizytem komponentu potomnego. Rekwizyty są przekazywane do elementu podrzędnego w metodzie renderowania elementu nadrzędnego jako drugi argument
React.createElement()
lub, jeśli używasz JSX, bardziej znane atrybuty znacznika.Wartość stanu rodzica
childsName
staje się wartością dzieckathis.props.name
. Z perspektywy dziecka nazwa rekwizytu jest niezmienna. Jeśli trzeba to zmienić, rodzic powinien po prostu zmienić swój stan wewnętrzny:a React przekaże je dziecku. Kolejne naturalne pytanie brzmi: co zrobić, jeśli dziecko musi zmienić nazwę rekwizytu? Zwykle odbywa się to poprzez zdarzenia potomne i wywołania zwrotne rodziców. Dziecko może narazić zdarzenie o nazwie na przykład
onNameChanged
. Następnie rodzic subskrybuje zdarzenie, przekazując moduł obsługi wywołania zwrotnego.Dziecko przekaże swoją nową nazwę jako argument do wywołania zwrotnego zdarzenia, wywołując np.
this.props.onNameChanged('New name')
, A rodzic użyje nazwy w procedurze obsługi zdarzeń, aby zaktualizować swój stan.źródło
W celu komunikacji rodzic-dziecko wystarczy przekazać rekwizyty.
Użyj stanu do przechowywania danych, których potrzebuje Twoja bieżąca strona w widoku kontrolera.
Użyj rekwizytów, aby przekazać procedury obsługi danych i zdarzeń do komponentów potomnych.
Te listy powinny pomóc w pracy z danymi w komponentach.
Rekwizyty
Stan
źródło
Po prostu,
Stan to lokalny stan komponentu, do którego nie można uzyskać dostępu ani modyfikować poza komponentem. Jest to równoważne zmiennym lokalnym w funkcji.
Zwykła funkcja JS
React Component
RekwizytyZ drugiej strony sprawiają, że komponenty nadają się do ponownego użycia, umożliwiając komponentom odbieranie danych z ich komponentów macierzystych w postaci rekwizytów. Są równoważne parametrom funkcji.
Zwykła funkcja JS
React Component
Kredyty: Manoj Singh Negi
Artykuł Link: wyjaśniono stan reakcji a rekwizyty
źródło
Podsumowanie rekwizytów i stanów, które lubię najbardziej, jest tutaj: reaguj-przewodnik Wielka wskazówka dla tych facetów. Poniżej znajduje się edytowana wersja tej strony:
rekwizyty vs stan
tl; dr Jeśli komponent musi w pewnym momencie zmienić jeden ze swoich atrybutów, ten atrybut powinien być częścią jego stanu, w przeciwnym razie powinien być tylko rekwizytem dla tego komponentu.
rekwizyty
Rekwizyty (skrót od właściwości) to konfiguracja komponentu. Są one odbierane z góry i niezmienne, o ile dotyczy ich Komponent. Komponent nie może zmieniać swoich rekwizytów, ale jest odpowiedzialny za składanie rekwizytów swoich komponentów potomnych. Rekwizyty nie muszą być tylko danymi - funkcje zwrotne mogą być przekazywane jako rekwizyty.
stan
Stan to struktura danych, która zaczyna się od wartości domyślnej po zamontowaniu komponentu. Może być mutowany w czasie, głównie w wyniku zdarzeń użytkownika.
Komponent zarządza wewnętrznie własnym stanem. Poza ustaleniem stanu początkowego, nie ma żadnego interesu w manipulowaniu stanem swoich dzieci. Możesz konceptualizować stan jako prywatny dla tego komponentu.
Zmiana rekwizytów i stanu
Czy ten składnik powinien mieć stan?
Stan jest opcjonalny. Ponieważ stan zwiększa złożoność i zmniejsza przewidywalność, preferowany jest Komponent bez stanu. Mimo że wyraźnie nie da się obejść bez stanu w interaktywnej aplikacji, należy unikać zbyt wielu składników Stateful.
Typy komponentów
Stateless Component Tylko rekwizyty, bez stanu. Poza funkcją render () niewiele się dzieje. Ich logika obraca się wokół otrzymywanych rekwizytów. Dzięki temu są bardzo łatwe do śledzenia i testowania.
Składnik stanowy Zarówno rekwizyty, jak i stan. Są one używane, gdy komponent musi zachować pewien stan. Jest to dobre miejsce do komunikacji klient-serwer (XHR, gniazda sieciowe itp.), Przetwarzania danych i reagowania na zdarzenia użytkownika. Tego rodzaju logistyka powinna być zamknięta w umiarkowanej liczbie komponentów Stateful, podczas gdy cała logika wizualizacji i formatowania powinna przejść w dół do wielu komponentów bezstanowych.
źródła
źródło
Więc po prostu stan jest ograniczony do bieżącego komponentu, ale rekwizyty można przekazać do dowolnego komponentu, który chcesz ... Możesz przekazać stan bieżącego komponentu jako rekwizyt do innych komponentów ...
Również w React mamy bezpaństwowe elementy, które mają tylko rekwizyty, a nie stan wewnętrzny ...
Poniższy przykład pokazuje, jak działają w Twojej aplikacji:
Nadrzędny (komponent z pełnym stanem):
Dziecko (komponent bezstanowy):
źródło
Kluczową różnicą między rekwizytami a stanem jest to, że stan jest wewnętrzny i kontrolowany przez sam komponent, podczas gdy rekwizyty są zewnętrzne i kontrolowane przez cokolwiek renderuje komponent.
źródło
Zasadniczo różnica polega na tym, że stan jest czymś w rodzaju atrybutów w OOP : jest czymś lokalnym dla klasy (komponentu), służącym do lepszego opisu. Rekwizyty są jak parametry - są przekazywane do komponentu z wywołującego komponentu (rodzica): tak jakbyś wywołał funkcję z pewnymi parametrami.
źródło
Zarówno stan, jak i rekwizyty w reakcji są używane do sterowania danymi w komponencie, generalnie rekwizyty są ustawiane przez element nadrzędny i przekazywane do komponentów podrzędnych i są ustalane w całym komponencie. W przypadku danych, które mają ulec zmianie, musimy użyć stanu. I rekwizyty są niezmienne, podczas gdy stany są zmienne , jeśli chcesz zmienić rekwizyty, możesz to zrobić z komponentu nadrzędnego, a następnie przekazać go do komponentów potomnych.
źródło
jak nauczyłem się podczas pracy z reagować.
rekwizyty są używane przez komponent do pobierania danych ze środowiska zewnętrznego tj. inny komponent (czysty, funkcjonalny lub klasa) lub klasa ogólna lub kod javascript / maszynopis
stany służą do zarządzania środowiskiem wewnętrznym komponentu oznacza zmiany danych wewnątrz komponentu
źródło
Rekwizyty: Rekwizyty to tylko własność komponentu, a reagowanie komponent jest niczym innym jak funkcją javascript.
const element =;
tutaj
<Welcome name="Sara" />
przekazując obiekt {name: 'Sara'} jako rekwizyty komponentu Welcome. Do przekazywania danych z jednego komponentu nadrzędnego do komponentu podrzędnego używamy rekwizytów. Rekwizyty są niezmienne. Podczas cyklu życia elementu rekwizyty nie powinny się zmieniać (uważaj je za niezmienne).Stan: stan jest dostępny tylko w komponencie. Do śledzenia danych w komponencie używamy stanu. możemy zmienić stan przez setState. Jeśli potrzebujemy przekazać stan dziecku, musimy przekazać go jako rekwizyty.
źródło
Stan:
rekwizyty:
źródło
Zasadniczo rekwizyty i stan to dwa sposoby, w jakie komponent może wiedzieć, co i jak renderować. Która część stanu aplikacji należy do stanu, a która do jakiegoś sklepu najwyższego poziomu, jest bardziej związana z projektem twojej aplikacji niż z działaniem React. Najprostszym sposobem na podjęcie decyzji, IMO, jest zastanowienie się, czy ten konkretny fragment danych jest przydatny do zastosowania jako całość, czy też jest to informacja lokalna. Ważne jest również, aby nie powielać stanu, więc jeśli jakiś kawałek danych można obliczyć na podstawie rekwizytów - powinien on zostać obliczony na podstawie rekwizytów.
Na przykład, powiedzmy, że masz kontrolę rozwijaną (która otacza standardowy HTML wybierz do niestandardowego stylu), która może a) wybrać pewną wartość z listy, i b) otworzyć lub zamknąć (tj. Wyświetlić lub ukryć listę opcji). Załóżmy teraz, że twoja aplikacja wyświetla listę elementów, a lista kontrolna listy kontrolnej filtruje wpisy listy. Wtedy najlepiej byłoby przekazać wartość aktywnego filtra jako rekwizyt i zachować lokalny stan otwarty / zamknięty. Ponadto, aby działał, należy przekazać moduł obsługi onChange z komponentu nadrzędnego, który zostanie nazwany wewnątrz elementu rozwijanego i natychmiast wyśle zaktualizowane informacje (nowy wybrany filtr) do sklepu. Z drugiej strony, stan otwarty / zamknięty może być utrzymany w rozwijanym składniku, ponieważ reszta aplikacji tak naprawdę nie dba o to, czy kontrola jest otwarta, dopóki użytkownik nie zmieni jej wartości.
Poniższy kod nie działa całkowicie, wymaga css i obsługi rozwijanych zdarzeń kliknięcia / rozmycia / zmiany, ale chciałem zachować przykład na minimalnym poziomie. Mam nadzieję, że pomaga zrozumieć różnicę.
źródło
Stan to sposób reagowania na transakcje z informacjami posiadanymi przez twój komponent.
Załóżmy, że masz komponent, który musi pobrać niektóre dane z serwera. Zwykle chcesz poinformować użytkownika, czy żądanie jest przetwarzane, czy nie powiodło się itp. Jest to informacja, która jest istotna tylko dla tego konkretnego komponentu. W tym momencie stan wchodzi do gry.
Zwykle najlepszym sposobem zdefiniowania stanu jest:
ale w najnowszych implementacjach React Native możesz po prostu:
Te dwa przykłady działają dokładnie tak samo, jest to tylko poprawa składni.
Czym więc różni się od używania atrybutów obiektów, jak zawsze w programowaniu OO? Zazwyczaj informacje przechowywane w twoim stanie nie mają być statyczne, z czasem będą się zmieniać, a widok będzie musiał zostać zaktualizowany, aby odzwierciedlić te zmiany. Stan oferuje tę funkcjonalność w prosty sposób.
Państwo NALEŻY BYĆ NIEZBĘDNE! i nie mogę się na to wystarczająco skoncentrować. Co to znaczy? Oznacza to, że NIGDY nie powinieneś robić czegoś takiego.
Właściwy sposób to zrobić:
Korzystając z this.setState, twój komponent przechodzi przez cykl aktualizacji, a jeśli jakakolwiek część stanu ulegnie zmianie, twoja metoda renderowania komponentu zostanie ponownie wywołana w celu odzwierciedlenia tych zmian.
Sprawdź dokumenty reakcji, aby uzyskać jeszcze bardziej rozbudowane wyjaśnienie: https://facebook.github.io/react/docs/state-and-lifecycle.html
źródło
Rekwizyty są po prostu skrótem dla właściwości. Rekwizyty to sposób, w jaki komponenty rozmawiają ze sobą. Jeśli w ogóle znasz React, powinieneś wiedzieć, że rekwizyty płyną w dół od elementu nadrzędnego.
Jest też przypadek, że możesz mieć domyślne rekwizyty, dzięki czemu rekwizyty są ustawione, nawet jeśli komponent nadrzędny nie przekazuje rekwizytów.
Dlatego ludzie określają React jako przepływ danych w jednym kierunku. To wymaga trochę zastanowienia i prawdopodobnie będę pisać o tym później, ale na razie pamiętaj: dane przepływają od rodzica do dziecka. Rekwizyty są niezmienne (fantazyjne słowo na to się nie zmienia)
Więc jesteśmy szczęśliwi. Komponenty odbierają dane od rodzica. Wszystko posortowane, prawda?
Cóż, niezupełnie. Co się stanie, gdy składnik odbierze dane od osoby innej niż rodzic? Co się stanie, jeśli użytkownik wprowadzi dane bezpośrednio do komponentu?
Właśnie dlatego mamy państwo.
STAN
Rekwizyty nie powinny się zmieniać, więc stan przyspiesza. Zwykle komponenty nie mają stanu i dlatego są nazywane bezpaństwowcami. Składnik używający stanu jest znany jako stanowy. Zapraszam do rzucania tego małego smakołyka na imprezy i obserwowania, jak ludzie oddalają się od ciebie.
Zatem stan jest używany, aby komponent mógł śledzić informacje pomiędzy dowolnymi renderami, które robi. Po ustawieniu setState aktualizuje obiekt stanu, a następnie ponownie renderuje komponent. Jest to super fajne, ponieważ oznacza to, że React zajmuje się ciężką pracą i jest niesamowicie szybki.
Jako mały przykład stanu, oto fragment kodu z paska wyszukiwania (warto sprawdzić ten kurs, jeśli chcesz dowiedzieć się więcej o React)
PODSUMOWANIE
Rekwizyty i stan robią podobne rzeczy, ale są używane na różne sposoby. Większość twoich komponentów prawdopodobnie będzie bezstanowa.
Rekwizyty służą do przekazywania danych od rodzica do dziecka lub samego komponentu. Są niezmienne i dlatego nie zostaną zmienione.
Stan jest używany dla danych zmiennych lub danych, które się zmienią. Jest to szczególnie przydatne do wprowadzania danych przez użytkownika. Pomyśl na przykład paski wyszukiwania. Użytkownik wpisze dane, a to zaktualizuje to, co zobaczy.
źródło
W skrócie.
źródło
state - Jest to specjalna zmienna właściwość przechowująca dane Component. ma wartość domyślną podczas montowania Componet.
rekwizyty - jest to specjalna właściwość, która jest niezmienna z natury i używana w przypadku przekazywania wartości z rodzica na dziecko. rekwizyty są tylko kanałem komunikacji między komponentami, zawsze przechodząc od góry (rodzic) do buttom (dziecko).
poniżej znajduje się pełny przykład łączenia stanu i rekwizytów: -
źródło
Ogólnie stanem jednego komponentu (rodzica) jest prop dla komponentu potomnego.
Rekwizyty są na ogół niezmienne.
W powyższym kodzie mamy klasę nadrzędną (Parent), która ma nazwę jako swój stan, która jest przekazywana do komponentu potomnego (klasa Child) jako rekwizyt, a komponent potomny renderuje go za pomocą {this.props.name}
źródło
Masz jakieś dane, które są wprowadzane przez użytkowników gdzieś w aplikacji.
składnik, w którym dane są wprowadzane, powinien mieć te dane w swoim stanie ponieważ musi nimi manipulować i zmieniać je podczas wprowadzania danych
gdziekolwiek indziej w aplikacji dane powinny być przekazywane jako rekwizyty do wszystkich innych komponentów
Tak, więc rekwizyty się zmieniają, ale są zmieniane u „źródła”, a następnie po prostu spływają stamtąd. Więc rekwizyty są niezmienne w kontekście komponentu, który je otrzymuje .
Np. Ekran danych referencyjnych, na którym użytkownicy edytują listę dostawców, zarządzałby tym stanem, co spowodowałoby następnie zapisanie zaktualizowanych danych w ReferenceDataState, które mogłoby znajdować się o jeden poziom poniżej AppState, a następnie ta lista dostawców byłaby przekazywana jako rekwizyty do wszystkich komponentów, które musiały z niego korzystać.
źródło
W React stany przechowują dane oraz rekwizyty. Różnica polega na tym, że przechowywane dane można modyfikować za pomocą różnych zmian. Nie są to nic więcej niż obiekty napisane płaskim skryptem JavaScript, więc mogą zawierać dane lub kody, reprezentujące informacje, które chcesz modelować. Jeśli potrzebujesz więcej informacji, zaleca się, aby zobaczyć te publikacje Wykorzystanie stanu w React i Wykorzystanie rekwizytów w React
źródło
źródło
Reagują pewne różnice między „stanem” a „rekwizytami”.
Reaguje kontrolami i renderuje DOM na podstawie stanu. Istnieją dwa typy stanów składników: rekwizyty to stan, który przenosi się między składnikami, a stan to wewnętrzny stan składników. Rekwizyty służą do przesyłania danych z komponentu nadrzędnego do komponentu podrzędnego. Komponenty mają również swój własny stan wewnątrz: stan, który można modyfikować tylko wewnątrz komponentu.
Zasadniczo stanem określonego komponentu mogą być rekwizyty komponentu potomnego, rekwizyty zostaną przekazane do potomków, co jest określone w metodzie renderowania komponentu macierzystego
źródło
Rekwizyty
rekwizyty służą do przekazywania danych w komponencie potomnym
rekwizyty zmieniają wartość poza komponentem (komponent potomny)
Stan
użycie stanu wewnątrz komponentu klasy
stan zmień wartość wewnątrz komponentu
Jeśli renderujesz stronę, wywołujesz setState w celu aktualizacji DOM (aktualizacja wartości strony)
Państwo ma ważną rolę do odegrania
źródło
W odpowiedzi na początkowe pytanie o rekwizyty są niezmienne, mówi się, że są one niezmienne w odniesieniu do elementu potomnego, ale można je zmieniać u rodzica.
źródło
React Komponenty używają stanu do CZYTANIA / PISANIA zmiennych wewnętrznych, które można zmieniać / mutować na przykład:
React props to specjalny obiekt, który pozwala programiście uzyskać zmienne i metody z komponentu nadrzędnego do komponentu podrzędnego.
To coś w rodzaju okien i drzwi domu. Rekwizyty są również niezmiennymi komponentami podrzędnymi, które nie mogą ich zmieniać / aktualizować.
Istnieje kilka metod, które pomagają słuchać, gdy rekwizyty są zmieniane przez element nadrzędny.
źródło
To jest mój obecny punkt widzenia na wyjaśnienie stanu i rekwizytów
Stan jest jak zmienna lokalna wewnątrz twojego komponentu. Możesz manipulować wartością stanu za pomocą set state. Następnie możesz przekazać wartość stanu na przykład do komponentu podrzędnego.
Rekwizyty to wartość, która dokładnie znajduje się w twoim sklepie redux, tak naprawdę pochodzi ze stanu, który pochodzi z reduktora. Twój komponent powinien być podłączony do redux, aby uzyskać wartość z rekwizytów. Możesz także przekazać wartość rekwizytów do elementu potomnego
źródło
Proste wyjaśnienie: STAN to lokalny stan składnika, na przykład kolor = „niebieski” lub animacja = prawda itp. Użyj this.setState, aby zmienić stan składnika. PROPS to sposób, w jaki komponenty komunikują się ze sobą (wysyłają dane od rodzica do dziecka) i umożliwiają ponowne użycie komponentów.
źródło
Stan to twoje dane, można je modyfikować, możesz zrobić z nim wszystko, co potrzebujesz, rekwizyty to dane tylko do odczytu, zwykle po przekazaniu rekwizytów masz już pracę z danymi i potrzebujesz elementu potomnego do ich renderowania lub jeśli twoje rekwizyty to funkcję wywołujesz, aby wykonać zadanie
źródło
Państwo jest źródłem prawdy, w której żyją twoje dane. Można powiedzieć, że stan manifestuje się za pomocą rekwizytów.
Udostępnianie rekwizytów komponentom zapewnia synchronizację interfejsu użytkownika z danymi. Komponent jest tak naprawdę funkcją zwracającą znaczniki.
Biorąc pod uwagę te same rekwizyty (dane do wyświetlenia), zawsze będzie generować ten sam znacznik .
Zatem rekwizyty są jak rurociągi, które przenoszą dane od źródła do funkcjonalnych komponentów.
źródło
Rekwizyty: reprezentują dane „tylko do odczytu”, które są niezmienne i odnoszą się do atrybutów komponentu nadrzędnego.
Stan: reprezentuje zmienne dane, które ostatecznie wpływają na to, co jest renderowane na stronie i zarządzane wewnętrznie przez sam komponent, i zmieniają się z czasem w wyniku wprowadzenia danych przez użytkownika.
źródło
Główną różnicą jest to, że stan jest prywatny dla komponentu i można go zmienić tylko w tym komponencie, podczas gdy rekwizyty są tylko wartością statyczną i kluczem do komponentu potomnego, który jest przekazywany przez komponent nadrzędny i nie można go zmienić w komponencie potomnym
źródło