setVariablesを介してリクエストが行われた場合、非同期要求の間のローカル状態、つまりロードインジケータを実装する方法がありますか? https://www.graphqlHub.com/graphqlsetVariablesを介したリレーリクエスト
_onChange = (ev) => {
this.setState({
loading:true
})
let gifType = ev.target.value;
this.props.relay.setVariables({
gifType
});
this.setState({
loading:false
})
}
これに
イラストメイキング要求は負荷状態を追跡しませんし、ビューへの非同期の変更が遅れを持つことになりますしながら、ロードはすぐに偽に渡すだろう。
ロードをsetVariablesに移すと、応答を追跡する方法はありますか?ルートコンテナに
renderLoading={function() {
return <div>Loading...</div>;
}}
を介して応答を追跡する能力は、Relay.createContainer
するための任意の同様の方法が存在していることは、データセットをナビゲートするsetVariablesを使用する悪い習慣ですか?
完全なコード
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
}
}
}
}
`,
},
});
おかげで、これは私が考えていたものです。私は気付いたことに気づいたことがありますが、これはデータの新しい読み込みごとに私の問題を解決しますが、既に読み込まれている以前の状態にクエリを行うと、readyState.doneの要求の初期値はtrue false(私はそれがすでにデータを要求していると仮定していると思います)これはトランジション間の遅れを取り戻します。 – user3224271
プライムドキャッシュの場合は、 'readyState.done'から' readyState.done && this.state.loading'に条件を少し微調整するだけで、不要な 'setState'呼び出しを避けることができます。 – Igorsvee