요청시 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
}
}
}
}
`,
},
});
덕분에,이 내가 생각했던 것입니다 . 한 가지주의 할 점은 tho 내가 알아 챘어,이 각각의 새로운 데이터로드에 대한 내 문제를 해결하지만 readyState.done에 대한 요청의 초기 값이 이미로드 된 이전 상태로 쿼리를 만들 때 대신 true입니다. 거짓 (그것은 그것이 이미 데이터를 요청했다고 가정하므로) 이것은 전환 사이의 지연을 가져옵니다. – user3224271
프라이밍 된 캐시의 경우'readyState.done'에서'readyState.done'와'readyState.done && this.state.loading'의 조건을 약간 조정하여 불필요한'setState' 호출을 피할 수 있습니다. – Igorsvee