2017-11-03 1 views
1

ändern Was die möglichen Gründe für die Suche werden beim Laden stecken = true (network = 1)?<query> .loading nicht auf true

Ich kann keine Abfrageergebnis auf Refetch erhalten und melden Sie sich nicht ‚called2‘

graphql(_stepQuery, { 
    name: 'stepQuery', 
    options: ({goalDocId}) => ({ 
     fetchPolicy: 'network-only', 
     notifyOnNetworkStatusChange: true, 
     variables: { 
     goalDocId 
     } 
    }) 
    } 
) 

componentWillReceiveProps(nextProps) { 
    let stepIdsFromServer 
    if (nextProps.currentGoalSteps.length > this.props.currentGoalSteps.length) { 
     console.log('called') 
     this.props.stepQuery.refetch() 
     console.log('this.props', this.props) 
     console.log('nextProps',nextProps) 
     if (!nextProps.stepQuery.loading) { 
     // console.log('nextProps.stepQuery.allSteps', nextProps.stepQuery.allSteps) 
      console.log('called2') 
} 

Antwort

1

Diese für eine Endlosschleife ziemlich gefährlich aussieht.

Zuerst ist die refetch Funktion ein Versprechen, so dass Sie nicht in der Lage sein werden, den richtigen Abfragestatus direkt nach dem Aufruf zum erneuten Abrufen zu erfahren. Sie müssten in der .then Funktion fortfahren. Siehe refetch Api.

Zweitens die Abfrage am Ende wird innerhalb der graphql Wrapper-Komponente ausgeführt. Sie sollten also den Ladezustand nicht überprüfen und in der Funktion componentWillReceiveProps erneut holen, denn wenn die Abfrage erneut ausgeführt wird, wird die gesamte Komponente erneut instanziiert und die componentWillReceiveProps-Funktion mit zurückgesetzten Zuständen und so weiter eingegeben.

Wenn Sie irgendeine Art von Suche benötigen, empfehle ich Ihnen eine Mutation als Abhilfe verwenden (mit withApollo Wrapper und in der componentWillReceiveProps rufen Sie this.props.client („Mutation“)), da dies nicht die ganze machen Komponente.

Verwandte Themen