当通过 setVariables 发出请求时,有没有办法考虑异步请求之间的本地状态,即实现加载指示器?
向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
})
}
这不会跟踪加载状态,并且加载将立即传递给 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
}
}
}
}
`,
},
});