Heim Web-Frontend js-Tutorial Verwenden Sie „React', „Redux', „React-Redux'.

Verwenden Sie „React', „Redux', „React-Redux'.

Jun 08, 2018 pm 03:03 PM
react redux 关系

Dieses Mal werde ich Ihnen die Vorsichtsmaßnahmen für die Verwendung von React, Redux und React-Redux vorstellen. Das Folgende ist ein praktischer Fall.

Dieser Artikel stellt die Beziehung zwischen React, Redux und React-Redux vor. Teilen Sie ihn mit allen und hinterlassen Sie eine Notiz für sich selbst. Die Details sind wie folgt:

Reagieren

Einige kleine Für das Projekt reicht es aus, nur React und State für die Datenverwaltung zu verwenden. Wann müssen Sie also Redux einführen? Wenn die Daten zum Rendern einer Komponente über Requisiten von der übergeordneten Komponente abgerufen werden, ist dies normalerweise A -> B, aber mit zunehmender Geschäftskomplexität kann es so sein: A -> B -> C -> > D --> E, die von E benötigten Daten müssen von A über Requisiten weitergeleitet werden, und das entsprechende E --> Die BCD-Komponente benötigt diese Daten nicht, sie muss jedoch durch sie geleitet werden, was in der Tat etwas unangenehm ist, und die übergebenen Requisiten und Rückrufe wirken sich auch auf die Wiederverwendung der BCD-Komponente aus. Oder wenn Geschwisterkomponenten bestimmte Daten gemeinsam nutzen möchten, ist es nicht sehr bequem, diese zu übertragen oder abzurufen. In solchen Situationen ist die Einführung von Redux notwendig.

Tatsächlich kann React die Daten Schicht für Schicht abrufen. . Das React-Redux, das später besprochen wird, verwendet Kontext, um jeder Unterkomponente den Zugriff auf die Daten im Speicher zu ermöglichen.

Redux

Eigentlich wollen wir nur einen Ort finden, an dem wir einige gemeinsame Daten speichern können. Jeder kann sie abrufen und ändern, das ist alles. Ist es in Ordnung, alle Variablen in eine einzige Variable einzufügen? Ja, natürlich funktioniert es, aber es ist zu unelegant und unsicher, da es sich um eine globale Variable handelt und jeder darauf zugreifen und sie ändern kann. Sie kann versehentlich von einem Freund überschrieben werden. Wenn globale Variablen nicht funktionieren, verwenden Sie einfach private Variablen, die nicht einfach geändert werden können ...

Jetzt müssen wir eine solche Funktion schreiben, die Folgendes erfüllt:

  1. Speichert ein Datenobjekt

  2. Die Außenwelt kann auf diese Daten zugreifen

  3. Die Außenwelt kann auch Änderungen vornehmen diese Daten

  4. Abonnenten benachrichtigen, wenn sich Daten ändern

function createStore(reducer, initialState) {
 // currentState就是那个数据
 let currentState = initialState;
 let listener = () => {};
 function getState() {
 return currentState;
 }
 function dispatch(action) {
 currentState = reducer(currentState, action); // 更新数据
 listener(); // 执行订阅函数
 return action;
 }
 function subscribe(newListener) {
 listener = newListener;
 // 取消订阅函数
 return function unsubscribe() {
  listener = () => {};
 };
 }
 return {
 getState,
 dispatch,
 subscribe
 };
}
const store = createStore(reducer);
store.getState(); // 获取数据
store.dispatch({type: 'ADD_TODO'}); // 更新数据
store.subscribe(() => {/* update UI */}); // 注册订阅函数
Nach dem Login kopieren

Schritte zum Aktualisieren von Daten:

  1. Was : Was möchten Sie tun--- Dispatch(Aktion)

  2. Wie: Wie man es macht, das Ergebnis davon--- Reducer(oldState, Action) => newState

  3. Dann?: Führen Sie die Abonnementfunktion erneut aus (z. B. erneutes Rendern der Benutzeroberfläche usw.)

Auf diese Weise Ein Store wird implementiert und ein Datenspeicherzentrum für externe Zugriffe usw. bereitgestellt. Dies ist die Hauptidee von Redux. Daher hat Redux keine wesentliche Beziehung zu React und kann normalerweise in Kombination mit anderen Bibliotheken verwendet werden. Es ist nur so, dass die Datenverwaltungsmethode von Redux sehr gut mit dem datengesteuerten Ansichtskonzept von React übereinstimmt. Die Kombination beider macht die Entwicklung sehr komfortabel.

Da wir nun einen sicheren Ort für den Zugriff auf Daten haben, wie können wir diese in React integrieren? Wir können bei der Initialisierung der Anwendung einen window.store = createStore(reducer) erstellen und dann bei Bedarf Daten über store.getState() abrufen, die Daten über store.dispatch aktualisieren und Datenänderungen über store.subscribe abonnieren Führen Sie setState aus ... Wenn Sie dies an vielen Stellen tun, wird es wirklich überwältigend sein und die Uneleganz globaler Variablen wird dadurch immer noch nicht vermieden.

React-Redux

Da globale Variablen viele Mängel aufweisen, ändern wir die Idee und integrieren den Store direkt in die Requisiten der React-Anwendung auf oberster Ebene, sofern dies für jede Unterkomponente möglich ist Greifen Sie auf die Requisiten der obersten Ebene zu. Zum Beispiel:

<TopWrapComponent store={store}>
 <App />
</TopWrapComponent>,
Nach dem Login kopieren

React bietet nur einen solchen Hook, Context, und seine Verwendung ist sehr einfach, wenn Sie sich die offizielle Demo ansehen. Da nun jede Unterkomponente problemlos auf den Store zugreifen kann, besteht der nächste Schritt darin, dass die Unterkomponente die im Store verwendeten Daten herausnimmt, sie ändert und sich für die Aktualisierung der Benutzeroberfläche usw. anmeldet. Jede Unterkomponente muss dies erneut tun. Offensichtlich muss es einen bequemeren Weg geben: Komponenten höherer Ordnung. Durch die Kapselung von store.getState(), store.dispatch und store.subscribe durch höherwertige Komponenten haben die Unterkomponenten kein Bewusstsein für den Store. Die Unterkomponenten verwenden normalerweise Requisiten, um Daten abzurufen, und Rückrufe, um Rückrufe auszulösen, was dem entspricht Existenz keines Ladens.

Das Folgende ist die grobe Implementierung dieser höherwertigen Komponente:

function connect(mapStateToProps, mapDispatchToProps) {
 return function(WrappedComponent) {
 class Connect extends React.Component {
  componentDidMount() {
  // 组件加载完成后订阅store变化,如果store有变化则更新UI
  this.unsubscribe = this.context.store.subscribe(this.handleStoreChange.bind(this));
  }
  componentWillUnmount() {
  // 组件销毁后,取消订阅事件
  this.unsubscribe();
  }
  handleStoreChange() {
  // 更新UI
  this.forceUpdate();
  }
  render() {
  return (
   <WrappedComponent
   {...this.props}
   {...mapStateToProps(this.context.store.getState())} // 参数是store里面的数据
   {...mapDispatchToProps(this.context.store.dispatch)} // 参数是store.dispatch
   />
  );
  }
 }
 Connect.contextTypes = {
  store: PropTypes.object
 };
 return Connect;
 };
}
Nach dem Login kopieren

Bei der Verwendung von connect wissen wir, dass wir einen Boilerplate-Code schreiben müssen, z. B. die beiden Funktionen mapStateToProps und mapDispatchToProps:

const mapStateToProps = state => {
 return {
 count: state.count
 };
};
const mapDispatchToProps = dispatch => {
 return {
 dispatch
 };
};
export default connect(mapStateToProps, mapDispatchToProps)(Child);
// 上述代码执行之后,可以看到connect函数里面的
 <WrappedComponent
 {...this.props}
 {...mapStateToProps(this.context.store.getState())}
 {...mapDispatchToProps(this.context.store.dispatch)}
 />
// 就变成了
 <WrappedComponent
 {...this.props}
 {count: store.getState().count}
 {dispatch: store.dispatch}
 />
// 这样,子组件Child的props里面就多了count和dispatch两个属性
// count可以用来渲染UI,dispatch可以用来触发回调
Nach dem Login kopieren

So,这样就OK了?OK了。 通过一个闭包生成一个数据中心store,然后把这个store绑定到React的顶层props里面,子组件通过HOC建立与顶层props.store的联系,进而获取数据、修改数据、更新UI。 这里主要讲了一下三者怎么窜在一起的,如果想了解更高级的功能,比如redux中间件、reducer拆分、connect的其他参数等,可以去看一下对应的源码。

相信看了本文案例你已经掌握了方法,更多精彩请关注php中文网其它相关文章!

推荐阅读:

怎样做出鼠标点击处心形图案漂浮

JS操作JSON数组去重

Das obige ist der detaillierte Inhalt vonVerwenden Sie „React', „Redux', „React-Redux'.. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

Video Face Swap

Video Face Swap

Tauschen Sie Gesichter in jedem Video mühelos mit unserem völlig kostenlosen KI-Gesichtstausch-Tool aus!

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

So erstellen Sie eine Echtzeit-Chat-App mit React und WebSocket So erstellen Sie eine Echtzeit-Chat-App mit React und WebSocket Sep 26, 2023 pm 07:46 PM

So erstellen Sie eine Echtzeit-Chat-Anwendung mit React und WebSocket Einführung: Mit der rasanten Entwicklung des Internets hat die Echtzeitkommunikation immer mehr Aufmerksamkeit auf sich gezogen. Live-Chat-Apps sind aus dem modernen Sozial- und Arbeitsleben nicht mehr wegzudenken. In diesem Artikel wird erläutert, wie Sie mit React und WebSocket eine einfache Echtzeit-Chat-Anwendung erstellen, und es werden spezifische Codebeispiele bereitgestellt. 1. Technische Vorbereitung Bevor wir mit der Erstellung einer Echtzeit-Chat-Anwendung beginnen, müssen wir die folgenden Technologien und Tools vorbereiten: React: eine zum Erstellen

Leitfaden zur React-Front-End- und Back-End-Trennung: So erreichen Sie die Entkopplung und unabhängige Bereitstellung von Front-End und Back-End Leitfaden zur React-Front-End- und Back-End-Trennung: So erreichen Sie die Entkopplung und unabhängige Bereitstellung von Front-End und Back-End Sep 28, 2023 am 10:48 AM

React-Leitfaden zur Front-End- und Back-End-Trennung: So erreichen Sie die Front-End- und Back-End-Entkopplung und die unabhängige Bereitstellung. Es sind spezifische Codebeispiele erforderlich. In der heutigen Webentwicklungsumgebung ist die Front-End- und Back-End-Trennung zu einem Trend geworden. Durch die Trennung von Front-End- und Back-End-Code kann die Entwicklungsarbeit flexibler und effizienter gestaltet und die Zusammenarbeit im Team erleichtert werden. In diesem Artikel wird erläutert, wie Sie mithilfe von React eine Front-End- und Back-End-Trennung erreichen und so die Ziele der Entkopplung und unabhängigen Bereitstellung erreichen. Zuerst müssen wir verstehen, was Front-End- und Back-End-Trennung ist. Im traditionellen Webentwicklungsmodell sind Front-End und Back-End gekoppelt

So erstellen Sie einfache und benutzerfreundliche Webanwendungen mit React und Flask So erstellen Sie einfache und benutzerfreundliche Webanwendungen mit React und Flask Sep 27, 2023 am 11:09 AM

So erstellen Sie mit React und Flask einfache und benutzerfreundliche Webanwendungen. Einführung: Mit der Entwicklung des Internets werden die Anforderungen an Webanwendungen immer vielfältiger und komplexer. Um den Anforderungen der Benutzer an Benutzerfreundlichkeit und Leistung gerecht zu werden, wird es immer wichtiger, moderne Technologie-Stacks zum Aufbau von Netzwerkanwendungen zu verwenden. React und Flask sind zwei sehr beliebte Frameworks für die Front-End- und Back-End-Entwicklung, und sie arbeiten gut zusammen, um einfache und benutzerfreundliche Webanwendungen zu erstellen. In diesem Artikel erfahren Sie, wie Sie React und Flask nutzen

So erstellen Sie eine zuverlässige Messaging-App mit React und RabbitMQ So erstellen Sie eine zuverlässige Messaging-App mit React und RabbitMQ Sep 28, 2023 pm 08:24 PM

So erstellen Sie eine zuverlässige Messaging-Anwendung mit React und RabbitMQ Einführung: Moderne Anwendungen müssen zuverlässiges Messaging unterstützen, um Funktionen wie Echtzeitaktualisierungen und Datensynchronisierung zu erreichen. React ist eine beliebte JavaScript-Bibliothek zum Erstellen von Benutzeroberflächen, während RabbitMQ eine zuverlässige Messaging-Middleware ist. In diesem Artikel wird erläutert, wie Sie React und RabbitMQ kombinieren, um eine zuverlässige Messaging-Anwendung zu erstellen, und es werden spezifische Codebeispiele bereitgestellt. RabbitMQ-Übersicht:

React Router-Benutzerhandbuch: So implementieren Sie die Front-End-Routing-Steuerung React Router-Benutzerhandbuch: So implementieren Sie die Front-End-Routing-Steuerung Sep 29, 2023 pm 05:45 PM

ReactRouter-Benutzerhandbuch: So implementieren Sie die Front-End-Routing-Steuerung Mit der Popularität von Single-Page-Anwendungen ist das Front-End-Routing zu einem wichtigen Bestandteil geworden, der nicht ignoriert werden kann. Als beliebteste Routing-Bibliothek im React-Ökosystem bietet ReactRouter umfangreiche Funktionen und benutzerfreundliche APIs, wodurch die Implementierung des Front-End-Routings sehr einfach und flexibel ist. In diesem Artikel wird die Verwendung von ReactRouter vorgestellt und einige spezifische Codebeispiele bereitgestellt. Um ReactRouter zuerst zu installieren, benötigen wir

So erstellen Sie eine schnelle Datenanalyseanwendung mit React und Google BigQuery So erstellen Sie eine schnelle Datenanalyseanwendung mit React und Google BigQuery Sep 26, 2023 pm 06:12 PM

So verwenden Sie React und Google BigQuery zum Erstellen schneller Datenanalyseanwendungen. Einführung: Im heutigen Zeitalter der Informationsexplosion ist die Datenanalyse zu einem unverzichtbaren Bindeglied in verschiedenen Branchen geworden. Unter anderem ist die Entwicklung schneller und effizienter Datenanalyseanwendungen für viele Unternehmen und Einzelpersonen zum Ziel geworden. In diesem Artikel wird erläutert, wie Sie mit React und Google BigQuery eine schnelle Datenanalyseanwendung erstellen, und es werden detaillierte Codebeispiele bereitgestellt. 1. Übersicht React ist ein Werkzeug zum Erstellen

So erstellen Sie Echtzeit-Datenverarbeitungsanwendungen mit React und Apache Kafka So erstellen Sie Echtzeit-Datenverarbeitungsanwendungen mit React und Apache Kafka Sep 27, 2023 pm 02:25 PM

So verwenden Sie React und Apache Kafka zum Erstellen von Echtzeit-Datenverarbeitungsanwendungen. Einführung: Mit dem Aufkommen von Big Data und Echtzeit-Datenverarbeitung ist die Erstellung von Echtzeit-Datenverarbeitungsanwendungen für viele Entwickler zum Ziel geworden. Die Kombination von React, einem beliebten Front-End-Framework, und Apache Kafka, einem leistungsstarken verteilten Messaging-System, kann uns beim Aufbau von Echtzeit-Datenverarbeitungsanwendungen helfen. In diesem Artikel wird erläutert, wie Sie mit React und Apache Kafka Echtzeit-Datenverarbeitungsanwendungen erstellen

PHP, Vue und React: Wie wählt man das am besten geeignete Frontend-Framework aus? PHP, Vue und React: Wie wählt man das am besten geeignete Frontend-Framework aus? Mar 15, 2024 pm 05:48 PM

PHP, Vue und React: Wie wählt man das am besten geeignete Frontend-Framework aus? Angesichts der kontinuierlichen Weiterentwicklung der Internettechnologie spielen Front-End-Frameworks eine wichtige Rolle bei der Webentwicklung. PHP, Vue und React sind drei repräsentative Frontend-Frameworks, jedes mit seinen eigenen einzigartigen Eigenschaften und Vorteilen. Bei der Auswahl des zu verwendenden Frontend-Frameworks müssen Entwickler eine fundierte Entscheidung treffen, die auf den Projektanforderungen, Teamfähigkeiten und persönlichen Vorlieben basiert. In diesem Artikel werden die Eigenschaften und Verwendungsmöglichkeiten der drei Front-End-Frameworks PHP, Vue und React verglichen.

See all articles