Wie zu zwingen, Apollo-Abfrage-Komponente re-Abfrage ausführen, wenn die übergeordnete Komponente neu gerendert

Ich bin mit Apollo Client <Query> innerhalb einer Komponente, die neu gerendert, wenn sich der Zustand geändert wird innerhalb eines Lebenszyklus-Methode. Ich möchte meine <Query> Komponente führen Sie die Abfrage erneut, weil ich weiß, dass sich Daten geändert haben.
Es scheint, dass die Abfrage-Komponente ist die Verwendung eines Caches, das muss für ungültig erklärt werden, bevor die Abfrage wird erneut ausgeführt.

Ich bin mit einem wonky Problemumgehung, mit der die caches der refetch Rückruf vom render prop in der übergeordneten Komponente, aber es fühlt sich falsch an. Ich werde meinen Ansatz in die Antworten, wenn jemand interessiert ist.

Mein code sieht ungefähr so aus. Ich entfernte loading und error Handhabung von Abfragen sowie einige andere Details für die Kürze.

class ParentComponent extends React.Component {
  componentDidUpdate(prevProps) {
    if (this.props.refetchId !== prevProps.refetchId) {
      const otherData = this.processData() //do something
      this.setState({otherData}) //this forces component to reload
    }
  }

  render() {
    const { otherData } = this.state

    return (
      <Query query={MY_QUERY}>
        {({ data }) => {
          return <ChildComponent gqlData={data} stateData={otherData} />
        }}
      </Query>
    )
  }
}

Wie kann ich Kraft <Query> zu Holen, neue Daten zu übergeben <ChildComponent>?

Obwohl ParentComponent neu gerendert, die als Requisiten oder Statusänderung Query nicht erneut ausführen. ChildComponent bekommt einen aktualisierten stateData Stütze, aber hat eine veraltete gqlData prop. So wie ich das verstehe Apollo query-cache für ungültig erklärt werden müssen, aber ich bin mir nicht sicher.

Bitte beachten Sie, dass übergeben refetch zu ChildComponent ist nicht die Antwort, weil es zeigt nur Informationen GraphQL und nicht weiß, Wann refetch. Ich will nicht vorstellen, Timer oder sonst erschweren ChildComponent um dieses Problem zu lösen - er braucht nicht zu wissen über diese Komplexität oder Daten abrufen betrifft.

  • Hinzugefügt habe ich paar Optionen, benutzte ich immer die erste, die zweite Methode würde nicht funktionieren, wenn Sie nicht möchten, übergeben Sie nichts auf.
InformationsquelleAutor Andrei R | 2018-07-26
Schreibe einen Kommentar