Heim  >  Artikel  >  Web-Frontend  >  React implementiert Singleton-Komponente (mit Code)

React implementiert Singleton-Komponente (mit Code)

php中世界最好的语言
php中世界最好的语言Original
2018-06-06 09:39:211983Durchsuche

Dieses Mal werde ich Ihnen zeigen, wie Sie eine Singleton-Komponente in React implementieren (mit Code). Was sind die Vorsichtsmaßnahmen für die Implementierung einer Singleton-Komponente in React? Hier ist ein praktischer Fall.

Anforderungshintergrund

Kürzlich besteht die Anforderung, dem Projekt ein Popup-Fenster für Nachrichtenbenachrichtigungen hinzuzufügen, um den Benutzer über einige Informationen zu informieren.

Nachdem der Benutzer die Nachricht gelesen hat, wird das Popup-Fenster nicht mehr angezeigt.

Problem

Offensichtlich erfordert dies den Eingriff des Backends, um entsprechende Schnittstellen bereitzustellen (so ist die Skalierbarkeit besser).

Während des Entwicklungsprozesses sind wir auf ein Problem gestoßen: Da unser System mehrseitig ist, fordern wir bei jedem Seitenwechsel die Back-End-Nachrichtenschnittstelle an. . Es gibt einen gewissen Leistungsverlust.

Da es sich um ein mehrseitiges System handelt, scheint es keinen Sinn zu machen, Singleton-Komponenten zu verwenden (aber es ist eine Gelegenheit zu lernen, wie man Singleton-Komponenten schreibt).
Also dachte ich darüber nach, den Browser-Cache zu verwenden, um aufzuzeichnen, ob das Popup-Fenster aufgetaucht ist (natürlich muss die Ablaufzeit festgelegt werden).

So schreiben Sie eine Singleton-Komponente

1. Werkzeugfunktion:

import ReactDOM from 'react-dom';
/**
 * ReactDOM 不推荐直接向 document.body mount 元素
 * 当 node 不存在时,创建一个 p
 */
function domRender(reactElem, node) {
 let p;
 if (node) {
  p = typeof node === 'string'
   ? window.document.getElementById(node)
   : node;
 } else {
  p = window.document.createElement('p');
  window.document.body.appendChild(p);
 }
 return ReactDOM.render(reactElem, p);
}

3 Komponenten:

export class SingletonLoading extends Component {
 globalLoadingCount = 0;
 pageLoadingCount = 0;
 state = {
  show: false,
  className: '',
  isGlobal: undefined
 }
 delayTimer = null;
 start = (options = {}) => {
  // ...
 }
 stop = (options = {}) => {
  // ...
 }
 stopAll() {
  if (!this.state.show) return;
  this.globalLoadingCount = 0;
  this.pageLoadingCount = 0;
  this.setState({show: false});
 }
 get isGlobalLoading() {
  return this.state.isGlobal && this.state.show;
 }
 get noWaiting() {
  return this.noGlobalWaiting && this.pageLoadingCount < 1;
 }
 get toPageLoading() {
  return this.noGlobalWaiting && this.isGlobalLoading;
 }
 get noGlobalWaiting() {
  return this.globalLoadingCount < 1;
 }
 render() {
  return <BreakLoading {...this.state} />;
 }
}
// 使用上面的工具函数
export const loading = domRender(<SingletonLoading />);

Ich glaube, dass Sie die Methode beherrschen, nachdem Sie den Fall in diesem Artikel gelesen haben. Weitere spannende Informationen finden Sie in anderen verwandten Artikeln auf der chinesischen PHP-Website!

Empfohlene Lektüre:

Detaillierte Erläuterung der Schritte zur Entwicklung von React-Projekten


Wie man die absolute Position des erreicht DOM-Element in der Frontend-Schnittstelle

Das obige ist der detaillierte Inhalt vonReact implementiert Singleton-Komponente (mit Code). Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
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