查询被置于load = true(networkStatus = 1)的可能原因是什么?
我无法在重新获取时获得查询结果,也无法记录'called2'
graphql(_stepQuery, {
name: 'stepQuery',
options: ({goalDocId}) => ({
fetchPolicy: 'network-only',
notifyOnNetworkStatusChange: true,
variables: {
goalDocId
}
})
}
)
componentWillReceiveProps(nextProps) {
let stepIdsFromServer
if (nextProps.currentGoalSteps.length > this.props.currentGoalSteps.length) {
console.log('called')
this.props.stepQuery.refetch()
console.log('this.props', this.props)
console.log('nextProps',nextProps)
if (!nextProps.stepQuery.loading) {
// console.log('nextProps.stepQuery.allSteps', nextProps.stepQuery.allSteps)
console.log('called2')
}
答案 0 :(得分:1)
对于无限循环来说,这看起来非常危险。
首先refetch
函数是一个Promise,因此在重新调用之后,您将无法立即知道正确的查询状态。您需要继续.then
功能。请参阅refetch Api。
其次,最后的查询是在graphql
包装器组件内执行的。所以你不应该检查加载状态并在componentWillReceiveProps
函数中重新获取,因为当再次执行查询时,整个组件再次被实例化,并将进入具有重置状态的componentWillReceiveProps
函数,依此类推。 / p>
如果您需要某种搜索,我建议您使用变异作为解决方法(使用withApollo
包装,并在componentWillReceiveProps
中调用this.props.client(" MUTATION&# 34;)),因为这不会渲染整个组件。