2016-08-12 3 views
0

Ich habe diesen kleinen Code-Schnipsel:Meteor Reagieren Abonnement Verzögerung

getSearchQuery(evt) { 
    let query = evt.target.value; 

    Meteor.subscribe('searchResults', query, function() { 
     console.log('subscription ready'); 
    }); 
    } 

render() { 
    return (
      <TextField 
      hintText='Hint text' 
      onChange={this.getSearchQuery.bind(this)} 
      fullWidth={true} 
      /> 
    ) 
    } 

Nach dem ersten Buchstaben in der Eingabe eingeben I in der Konsole ‚Abonnement bereit‘ Ausgang erwarten, aber diese Ausgabe erscheint erst nach dem zweiten Buchstaben eingeben. Mit anderen Worten, der 'Abonnement bereit' -Ausgang verzögert sich bis zur nächsten Buchstabeneingabe.

Zum Beispiel, wenn die Suchzeichenfolge '123' ist, wird die Eingabe von '123' zu zwei 'abonnementbereiten' Ausgaben führen, während ich auf drei erwarte.

Ist es möglich, dieses Problem irgendwie zu beheben?

+1

Zeigen Sie Ihre versuchen veröffentlichen Funktion "onChange" auf "onKeyUp" inside

+0

Das Problem war mit der Veröffentlichung zu ändern, '' 'Meteor.publish ('search', function (Abfrage) { Prüfung (Abfrage, String); if (query.length> = 2) { lassen items = Items.find ( {$ text: { $ Suche: Abfrage } }, { Felder: { searchScore: { $ meta: ‚textScore ' } }, Sortierung: { searchScore: { $ meta: 'textScore' } } } ); Rücksendungen; } }); '' ' – torayeff

+0

> 2;) ist was behoben? –

Antwort

1

Ich bemerkte, dass Sie auf Property zu ändern weitergeben, ich empfehle, dass Sie onKeyPress verwenden, siehe: https://facebook.github.io/react/docs/events.html#keyboard-events als Es ist pure reagieren Ereignis, wie für das Abonnement bereit Protokoll. Stellen Sie sicher, dass Sie ordnungsgemäße Bedingungen in Ihrer Veröffentlichungsfunktion anstelle von .length >= 2 festgelegt haben. length > 2.

Verwandte Themen