2016-12-01 2 views
1

Ich habe ein Problem bei der Verwendung react-apollo mit FlowRouter (in einem meteor Projekt). Das ist mein graphql query (es wird angenommen, alle 5 Sekunden aktualisiert):FlowRouter wird nicht innerhalb einer Apollo (graphql) -Abfrage erkannt

@graphql(myQuery, { 
    options: { 
    pollInterval: 5000, 
    variables: { 
     userId: FlowRouter.getQueryParam('r'), 
     registerToken: FlowRouter.getQueryParam('registerToken') 
    } 
    }, 
}) 
export const default class MyComponent; 

Wenn ich hart Codierung der userId und registerToken Argumente, die Abfrage funktioniert gut.
Also ich schätze das Problem hier ist, dass diese FlowRouter.getQueryParam() Funktionen undefined zurückgeben (obwohl ich auf der Client-Seite bin). Sie funktionieren gut, wenn ich sie innerhalb von MyComponent oder der Browser-Konsole anrufe.

Antwort

1

Wird dieser Code beim Laden der Seite ausgeführt? Ich sehe nicht warum, aber vielleicht getQueryParam ist immer undefiniert beim Laden der Seite? (Oder Sie location.href analysieren könnte)

Wenn ja, es ist reaktiv, so könnten Sie warten, bis es einen Wert hat, und starten Sie dann die Abfrage:

Tracker.autorun(c => 
    if (FlowRouter.getQueryParam('r')) { 
    // do query 
    c.stop() 
    } 
) 
0

Basierend auf Loren Antwort weggelassen ich die FlowRouter.getQueryParam() Funktionen und verwendet reine JavaScript statt (kopiert von this SO question):

function getParameterByName(name, url) { 
    if (!url) { 
     url = window.location.href; 
    } 
    name = name.replace(/[\[\]]/g, "\\$&"); 
    var regex = new RegExp("[?&]" + name + "(=([^&#]*)|&|#|$)"), 
     results = regex.exec(url); 
    if (!results) return null; 
    if (!results[2]) return ''; 
    return decodeURIComponent(results[2].replace(/\+/g, " ")); 
} 

Nutzungs:

// query string: ?foo=lorem&bar=&baz 
var foo = getParameterByName('foo'); // "lorem" 
var bar = getParameterByName('bar'); // "" (present with empty value) 
var baz = getParameterByName('baz'); // "" (present with no value) 
var qux = getParameterByName('qux'); // null (absent) 

Alles funktioniert jetzt!

Verwandte Themen