In der Scroll-Ansicht des WeChat-Applets treten beim Hochziehen zum Laden häufiger Fehler auf (es werden zu viele Daten geladen und es können sogar doppelte Daten vorhanden sein). Problembeschreibung: Einmaliges Hochziehen löst die Bottoming-Funktion onReachBottom() mehrere Male aus. Beim Wechsel zu einer benutzerdefinierten „Weitere laden“-Funktion wie loadMore() besteht das Problem weiterhin. Produktionsumgebung: Dieses Problem besteht weiterhin in der neuesten Version 1.9.94 der Debugging-Basisbibliothek. Lösung: Fügen Sie Zustandskontrollvariablen hinzu, um die Auslösebedingungen der Bottoming-Funktion bzw. das Laden weiterer Funktionen einzuschränken. Nach dem Hochladen der Seite werden weitere Daten geladen. Im Bild unten sehen Sie, dass es doppelte Daten gibt. Allgemeiner Front-End-WXML-Code search.wxml <!--pages/shop/search.wxml--> <scroll-view scroll-y="true" style="height:{{windowHeight}}px;" bindscrolltolower="onReachBottom"> <!-- Produktliste --> <Ansichtsklasse="flex-wrp"> <block wx:for="{{items}}"> <view bindtap="onItemClick" class="item-box" data-iid="{{item.id}}"> <image class="item-pic" src="{{item.thumb}}" mode="aspectFill"></image> <Klasse anzeigen="item-info"> <view class='item-name'>{{item.name}}</view> <Ansichtsklasse='Verkaufspreis-Box'> <text class='aktueller Preis'>¥{{item.aktueller_Preis}}</text> <text class='item-sold'><text class='sold-title'>Verkaufsvolumen</text> {{item.sold_num}}</text> </Ansicht> </Ansicht> </Ansicht> </block> </Ansicht> <view wx:if="{{pageEnd==true}}" class='scrollEnd'>Alle Daten wurden angezeigt...</view> </scroll-ansicht> Erster Blick auf Testfall 1 search.js (nicht behobener Fehler) //seiten/shop/public/search/search.js /* JS-Anwendungsfall mit BUG */ const app = getApp(); var page = 0; //Seiten-Tag Page({ Daten: { pageEnd:false, //Ist das das untere Ende der Seite? windowHeight: app.getWH(), //Anwendungshöhe // Produktlisten-Array-Elemente:[], }, /***************************** System- und Seitenfunktion *************************/ //Seite wird geladen onLoad: Funktion (Optionen) { //Laden Sie zuerst this.getServerItems(page); }, // Bottom-Touch-Funktion (nach oben ziehen, um mehr zu laden) onReachBottom: Funktion () { this.getServerItems(Seite); }, /************************* Netzwerkanfrage************************/ /** * Holen Sie sich die Server-Produktliste * @param {string} page paging default 0 */ getServerItems: Funktion (Seite) { var tar = dies; //Standardwert festlegen pg = pg? pg: 0; wx.showLoading({//Toast anzeigen Titel: „Wird geladen …“, }); //Netzwerkanfrage wx.request({ URL: "https://xxx.com/api/items/search", Daten: {Seite: pg}, Methode: 'POST', Header: { 'Inhaltstyp': 'Anwendung/x-www-form-urlencoded' }, Erfolg: Funktion (res) {//Netzwerkanforderung erfolgreich, wenn (res.data.status == 1) {//Es gibt neue Daten, var tmpArr = res.data.data; arr = arr.concat(tmpArr); tar.setData({ Artikel: arr, }); Seite++; } sonst {//res.data.status == 0 Keine neuen Daten tar.setData({ pageEnd:true, //Informationen am Seitenende anzeigen}) } }, Fehler: Funktion (e) {//Netzwerkanforderung fehlgeschlagen console.log(e); }, abgeschlossen: function(c){//Netzwerkanforderung abgeschlossen wx.hideLoading();//Toast ausblenden } }) }, Beheben Sie den Fehler und fügen Sie die untere Funktionssteuervariable canUseReachBottom zur obigen search.js hinzu //seiten/shop/public/search/search.js /* JS-Anwendungsfall nach der Behebung des BUG*/ const app = getApp(); var Seite = 0; /* ------------------------- */ var canUseReachBottom = true; //Steuervariable für die Touch-Funktion unten /* ------------------------- */ Seite({ Daten: { Seitenende:false, Fensterhöhe: app.getWH(), Artikel:[], }, onLoad: Funktion (Optionen) { this.getServerItems(Seite); }, // Bottom-Touch-Funktion (nach oben ziehen, um mehr zu laden) onReachBottom: Funktion () { /* ------------------------- */ if(!canUseReachBottom) return; //Wenn die Bottoming-Funktion nicht verfügbar ist, werden die Netzwerkanforderungsdaten nicht aufgerufen /* ------------------------- */ this.getServerItems(Seite); }, ServerItems: Funktion (pg) { /* ------------------------- */ canUseReachBottom = false; //Bottom-Touch-Funktion schließen /* ------------------------- */ var tar = dies; pg = pg? pg: 0; wx.showLoading({ Titel: „Wird geladen …“, }); wx.Anfrage({ URL: "https://xxx.com/api/items/search", Daten: {Seite: pg}, Methode: 'POST', Header: { 'Inhaltstyp': 'Anwendung/x-www-form-urlencoded' }, Erfolg: Funktion (res) { if (res.data.status == 1) {//Es gibt neue Daten var tmpArr = res.data.data; arr = arr.concat(tmpArr); tar.setData({ Artikel: arr, }); Seite++; /* ------------------------- */ canUseReachBottom = true; //Es gibt neue Daten, die Bottoming-Funktion ist aktiviert und bereitet den nächsten Bottoming-Aufruf vor /* ------------------------- */ } anders { tar.setData({ Seitenende:true, }) } }, Fehler: Funktion (e) { konsole.log(e); }, komplett: Funktion(c){ wx.hideLoading(); } }) }, Zusammenfassung: Die Ursache des Fehlers kann darin liegen, dass nach dem Auslösen der Bottoming-Funktion Netzwerkdaten angefordert werden -> das Miniprogramm die Daten an das Frontend rendert. Da diese beiden Prozesse zeitaufwändig sind, hatte das Frontend keine Zeit, das Rendering abzuschließen, und die Bottoming-Funktion stellte fest, dass sich die Frontend-Seite immer noch am unteren Ende befand, und löste die Bottoming-Funktion erneut oder mehrmals aus. Dies führt zum wiederholten Laden von Daten. Sie können es auch sehen, indem Sie sich die vConsole der Entwicklungsversion der mobilen App ansehen. Durch einmaliges Hochfahren werden drei nacheinander gestartete Netzwerkanforderungen ausgelöst. Anschließend gibt der Server die Erfolgsergebnisse verzögert nacheinander zurück. Wie in der Abbildung gezeigt: Das Obige ist der vollständige Inhalt dieses Artikels. Ich hoffe, er wird für jedermanns Studium hilfreich sein. Ich hoffe auch, dass jeder 123WORDPRESS.COM unterstützen wird. Das könnte Sie auch interessieren:
|
<<: So beheben Sie den 10060-Unknow-Fehler, wenn Navicat eine Remote-Verbindung zu MySQL herstellt
>>: Detaillierte Erklärung zum Kopieren und Sichern von Docker-Containerdaten
Dieser Artikel stellt den Implementierungscode fü...
Problembeschreibung Es gibt einen Abfragetyp name...
1. Nach dem Betreten des Containers Katze /etc/ho...
Inhaltsverzeichnis 1. Hintergrund 2. Was ist eine...
Vorwort Bei der Frontend-Entwicklung stoßen wir h...
Ich habe MySQL auf meinem Computer längere Zeit n...
Letztes Wochenende bereitete sich ein Bruderproje...
0. Was ist ein Tag? XML/HTML-CodeInhalt in die Zw...
Basierend auf täglichen Entwicklungserfahrungen u...
1. Versuchsbeschreibung Installieren Sie in der v...
Inhaltsverzeichnis 1. Einleitung 2. Code-Implemen...
1. Einleitung Beim Schreiben von Animationseffekt...
Aus historischen Gründen basiert die MySQL-Replik...
Inhaltsverzeichnis Erläuterung des unidirektional...
Dieser Artikel zeigt anhand eines Beispiels, wie ...