Wenn eine Anfrage über setVariables gestellt wird gibt es eine Möglichkeit, den lokalen Zustand zwischen asynchronen Anfragen zu berücksichtigen, d. H. Den Lade-Indikator zu implementieren?Relay-Anfragen über setVariables
eine Darstellung Herstellung Anfragen an https://www.graphqlHub.com/graphql
_onChange = (ev) => {
this.setState({
loading:true
})
let gifType = ev.target.value;
this.props.relay.setVariables({
gifType
});
this.setState({
loading:false
})
}
dies den Ladezustand nicht verfolgen und Laden wird sofort auf false weitergeben, während die Asynchron die Ansicht ändert Verzögerung hat.
Wenn wir das Laden in setVariables verschieben, gibt es eine Möglichkeit, die Antwort zu verfolgen? im Wurzelbehälter gibt es die Möglichkeit, über Reaktion
renderLoading={function() {
return <div>Loading...</div>;
}}
gibt es eine ähnliche Methode zu verfolgen setVariables für Relay.createContainer
ist es schlecht Praxis zu verwenden, um durch Datensätzen zu navigieren?
vollständige Code
class GiphItems extends React.Component {
constructor(){
super();
this.state = {
loading: false
}
}
render() {
const random = this.props.store.random
return <div>
<select onChange={this._onChange.bind(this)} value={this.props.relay.variables.gifType}>
<option value="sexy">Sexy</option>
<option value="cats">Cats</option>
<option value="goal">Goal</option>
<option value="lol">LOL</option>
</select>
{this.state.loading ? 'LOADING' : <a href={random.url}><img src={random.images.original.url} className="img-responsive"/></a>}
</div>;
}
_onChange = (ev) => {
this.setState({
loading:true
})
let gifType = ev.target.value;
this.props.relay.setVariables({
gifType
});
this.setState({
loading:false
})
}
}
GiphItems = Relay.createContainer(GiphItems, {
initialVariables: {
gifType: "sexy"
},
fragments: {
store:() => Relay.QL`
fragment on GiphyAPI {
random(tag: $gifType) {
id
url
images {
original {
url
}
}
}
}
`,
},
});
Dank, das ist, was ich im Sinn hatte, . eine Sache zu beachten, dass ich bemerkt habe, das löst mein Problem für jedes neue Laden von Daten, aber wenn eine Abfrage zu einem vorherigen Zustand, der bereits geladen wurde der Anfangswert in der Anfrage für readyState.done ist wahr und nicht false (ich nehme an, da angenommen wird, dass die Daten bereits angefordert wurden), dies bringt die Verzögerung zwischen den Übergängen zurück. – user3224271
Im Falle eines vorbereiteten Caches können Sie den unnötigen 'setState'-Aufruf vermeiden, indem Sie die Bedingung leicht von' readyState.done' auf 'readyState.done && this.state.loading' umstellen. – Igorsvee