<query> .loading不会更改为true

时间:2017-11-03 17:21:48

标签: apollo react-apollo

查询被置于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')
}

1 个答案:

答案 0 :(得分:1)

对于无限循环来说,这看起来非常危险。

首先refetch函数是一个Promise,因此在重新调用之后,您将无法立即知道正确的查询状态。您需要继续.then功能。请参阅refetch Api

其次,最后的查询是在graphql包装器组件内执行的。所以你不应该检查加载状态并在componentWillReceiveProps函数中重新获取,因为当再次执行查询时,整个组件再次被实例化,并将进入具有重置状态的componentWillReceiveProps函数,依此类推。 / p>

如果您需要某种搜索,我建议您使用变异作为解决方法(使用withApollo包装,并在componentWillReceiveProps中调用this.props.client(&#34; MUTATION&# 34;)),因为这不会渲染整个组件。