Wenn Sie React Native oder React noch nicht kennen, sind Ihnen die Wörter „state“ und „props“ schon einmal begegnet. Das Verständnis dieser beiden ist für die Entwicklung dynamischer und anpassungsfähiger mobiler Anwendungen von entscheidender Bedeutung. In diesem Blog-Artikel gehen wir ausführlich auf Status und Requisiten ein, untersuchen ihre Unterschiede und erfahren, wie Sie den Datenfluss in Ihrer React Native-Anwendung effektiv handhaben.
State ist ein integriertes Objekt, das es Komponenten ermöglicht, ihre eigenen Daten zu erstellen und zu verwalten. Es enthält Informationen, die sich im Laufe des Lebenszyklus der Komponente ändern können. Immer wenn sich der Status ändert, wird die Komponente neu gerendert, um diese Änderungen widerzuspiegeln.
Props, kurz für Eigenschaften, sind schreibgeschützte Komponenten. Dabei handelt es sich um externe Parameter, die an eine Komponente übergeben werden, ähnlich wie Argumente an eine Funktion übergeben werden.
Besonderheit | Zustand | Requisiten |
---|---|---|
Wandlungsfähigkeit | Veränderlich (kann sich im Laufe der Zeit ändern) | Unveränderlich (schreibgeschützt) |
Umfang | Lokal zur Komponente | Von übergeordneten an untergeordnete Komponenten übergeben |
Zweck | Verwaltet Daten, die sich im Laufe der Zeit ändern | Konfiguriert Komponenten mit externen Daten |
Aktualisierungen | Löst bei Aktualisierung ein erneutes Rendern aus | Löst kein erneutes Rendern aus, wenn es im übergeordneten Element geändert wird |
Zu verstehen, wann der Status und wann Requisiten verwendet werden sollten, ist der Schlüssel zur Verwaltung des Datenflusses in Ihrer App.
Eine effektive Datenflussverwaltung stellt sicher, dass sich Ihre App vorhersehbar verhält und einfacher zu debuggen und zu warten ist.
React Native verwendet einen unidirektionalen Datenfluss. Daten werden über Requisiten von übergeordneten zu untergeordneten Komponenten verschoben. Dadurch ist der Datenfluss leichter zu verstehen und zu debuggen.
Wenn mehrere Komponenten Zugriff auf dasselbe Datenelement benötigen, ist es am besten, den Status auf den nächsten gemeinsamen Vorfahren zu heben. Auf diese Weise kann der gemeinsame Zustand über Requisiten weitergegeben werden.
Um untergeordneten Komponenten die Kommunikation mit übergeordneten Komponenten zu ermöglichen, können Sie Funktionen (Rückrufe) als Requisiten weitergeben. Die untergeordnete Komponente kann dann diese Funktion aufrufen, um Daten an die übergeordnete Komponente zurückzusenden.
Sehen wir uns einige Codebeispiele an, um diese Konzepte zu veranschaulichen.
Übergeordnete Komponente (App.js):
import React from 'react'; import { View } from 'react-native'; import Greeting from './Greeting'; const App = () => { return (); }; export default App;
Untergeordnete Komponente (Greeting.js):
import React from 'react'; import { Text } from 'react-native'; const Greeting = (props) => { returnHello {props.name} ; }; export default Greeting;
Erläuterung:
Zählerkomponente (Counter.js):
import React, { useState } from 'react'; import { View, Button, Text } from 'react-native'; const Counter = () => { const [count, setCount] = useState(0); return (); }; export default Counter; You clicked {count} times
Erläuterung:
Übergeordnete Komponente (TemperatureConverter.js):
import React, { useState } from 'react'; import { View } from 'react-native'; import TemperatureInput from './TemperatureInput'; const toCelsius = (fahrenheit) => ((fahrenheit - 32) * 5) / 9; const toFahrenheit = (celsius) => (celsius * 9) / 5 32; const TemperatureConverter = () => { const [temperature, setTemperature] = useState(''); const [scale, setScale] = useState('c'); const handleCelsiusChange = (temp) => { setScale('c'); setTemperature(temp); }; const handleFahrenheitChange = (temp) => { setScale('f'); setTemperature(temp); }; const celsius = scale === 'f' ? toCelsius(parseFloat(temperature)) : temperature; const fahrenheit = scale === 'c' ? toFahrenheit(parseFloat(temperature)) : temperature; return (); }; export default TemperatureConverter;
Untergeordnete Komponente (TemperatureInput.js):
import React from 'react'; import { TextInput, Text } from 'react-native'; const scaleNames = { c: 'Celsius', f: 'Fahrenheit', }; const TemperatureInput = ({ scale, temperature, onTemperatureChange }) => { return (Enter temperature in {scaleNames[scale]}: > ); }; export default TemperatureInput;
Erläuterung:
Zustandslose Komponenten sind einfacher zu testen und zu debuggen. Verwenden Sie Requisiten, um Daten an sie zu übergeben.
Verwenden Sie den Status nur bei Bedarf. Zu viele zustandsbehaftete Komponenten können die Verwaltung Ihrer App erschweren.
Ändern Sie den Zustand niemals direkt. Verwenden Sie immer setState oder die Updater-Funktion von useState.
Verwenden Sie PropTypes, um die beabsichtigten Arten von Eigenschaften zu dokumentieren, die an Komponenten übergeben werden.
import PropTypes from 'prop-types'; Greeting.propTypes = { name: PropTypes.string.isRequired, };
Für Daten, auf die viele Komponenten auf unterschiedlichen Verschachtelungsebenen zugreifen müssen, sollten Sie die Verwendung der Kontext-API in Betracht ziehen.
// Incorrect this.state.count = this.state.count 1; // Correct this.setState({ count: this.state.count 1 });
Untergeordnete Komponenten sollten nicht versuchen, Requisiten oder den Status des übergeordneten Elements direkt zu ändern. Rückrufe verwenden.
Das Verständnis und die effektive Verwaltung von Status und Requisiten ist für jeden React Native-Entwickler von entscheidender Bedeutung. Wenn Sie diese Konzepte beherrschen, können Sie Anwendungen erstellen, die nicht nur funktional, sondern auch sauber, effizient und wartbar sind.
Erinnern:
Nehmen Sie sich die Zeit, diese Konzepte in Ihren Projekten zu üben, und Sie werden eine deutliche Verbesserung Ihres Entwicklungsworkflows feststellen.
Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.
Copyright© 2022 湘ICP备2022001581号-3