Co to są komponenty kontrolowane i niekontrolowane komponenty w ReactJS? Czym się od siebie różnią?
106
Co to są komponenty kontrolowane i niekontrolowane komponenty w ReactJS? Czym się od siebie różnią?
Odpowiedzi:
Dotyczy to stanowych komponentów DOM (elementów formularzy), a dokumentacja Reacta wyjaśnia różnicę:
props
i powiadamia zmiany poprzez wywołania zwrotne jakonChange
. Komponent nadrzędny „kontroluje” go, obsługując wywołanie zwrotne i zarządzając własnym stanem oraz przekazując nowe wartości jako właściwości do kontrolowanego komponentu. Można to również nazwać „głupim komponentem”.ref
znaleźć swoją obecną wartość, gdy jest to potrzebne. To trochę bardziej przypomina tradycyjny HTML.Większość natywnych składników formularza React obsługuje zarówno kontrolowane, jak i niekontrolowane użycie:
// Controlled: <input type="text" value={value} onChange={handleChange} /> // Uncontrolled: <input type="text" defaultValue="foo" ref={inputRef} /> // Use `inputRef.current.value` to read the current value of <input>
W większości (lub we wszystkich) przypadkach należy używać kontrolowanych komponentów .
źródło
state
raczej przejmowana niżprops
?props
. Niekontrolowany składnik użyłbystate
do wewnętrznej kontroli samej wartości. To jest kluczowa różnica.controlled components
(<input type="text" value="value" onChange={handleChangeCallbackFn} />
) vs. tradycyjny HTML gdzie element uchwyt wejściowy własnej wartości i może być odczytany poprzezrefs
nazywauncontrolled components
(<value type="text" />
). Kontrolowane komponenty zarządzają własnym stanem poprzezsetState
lub pobierają go z komponentu nadrzędnego jako właściwości.defaultValue
przez właściwości, ale który powiadamia kontroleronBlur
?<Button onClick={() => console.log("clicked")}>Click</Button>
.źródło
Komponent kontrolowany to komponent, który pobiera zmienioną wartość z funkcji wywołania zwrotnego, a komponent niekontrolowany to komponent, który ma komponent z DOM. Na przykład, gdy wartość wejściowa zostanie zmieniona, możemy użyć funkcji onChange w komponencie kontrolowanym, a także możemy uzyskać wartość za pomocą DOM, jak ref.
źródło