Javascript Apollo React客户端-查询组件不';t在第一个道具/变量更改时返回后端-在所有后续更改时返回后端

Javascript Apollo React客户端-查询组件不';t在第一个道具/变量更改时返回后端-在所有后续更改时返回后端,javascript,reactjs,apollo,react-apollo,Javascript,Reactjs,Apollo,React Apollo,我有一个Apollo查询组件。它的查询变量由页面组件通过URL上的查询字符串定义,然后通过props传递给查询组件 包含查询的组件由以下MWE表示: import React, { Component } from 'react' // gql stuff import gql from 'graphql-tag' import { Query } from 'react-apollo' const GET_SEARCH_RESULTS = gql` query searchProduct

我有一个Apollo查询组件。它的查询变量由页面组件通过URL上的查询字符串定义,然后通过props传递给查询组件

包含查询的组件由以下MWE表示:

import React, { Component } from 'react'
// gql stuff
import gql from 'graphql-tag'
import { Query } from 'react-apollo'

const GET_SEARCH_RESULTS = gql`
  query searchProducts($brand: [String]) {
    searchProducts(brand: $brand) {
      id
      name
      brand
    }
  }
`

export default class SearchResults extends Component {
  render () {
    const variables = {
      ...this.props.searchQuery
    }

    return (
      <Query
        query={GET_SEARCH_RESULTS}
        variables={variables}
        fetchPolicy='cache-and-network'
      >
        {({ loading, error, data, variables }) => {
          if (loading) {
            return <div>Loading...</div>
          }

          if (error) {
            return <div>ERROR: {JSON.stringify(error)}</div>
          }

          const { searchProducts } = data

          return (
            <div>
              <div>{'PROPS ' + JSON.stringify(this.props.searchQuery)}</div>
              <div>{'VARIABLES ' + JSON.stringify(variables)}</div>
              <div>{'DATA ' + JSON.stringify(data)}</div>
              <div>{'SEARCH PRODUCTS ' + JSON.stringify(searchProducts)}</div>
            </div>
          )
        }}
      </Query>
    )
  }
}
但是,在第一次更改道具(第二组查询变量)时,查询不会启动-它根本不会到达后端。虽然传递给查询的变量是正确的:

PROPS {"brand":["Google"]}

VARIABLES {"brand":["Google"]}

DATA {}

SEARCH PRODUCTS undefined
但是,在下一次更改道具和所有后续更改时,查询将正确触发

尽管收到了正确的新变量,但我无法确定是什么原因导致查询无法启动


我在查询组件上尝试了
fetchPolicy='network-only'
,但这并不能解决问题。

能否添加MapStateTrops并保持一个状态我认为查询组件看不到您的道具更改,并且不允许检查上述道具,这可能是另一个原因。 在您的对象中,关键点是相同的,对此我不确定

阅读后,我相信您希望在渲染组件中进行更改。 所以,只要试着通过改变状态或道具的改变来触发重播,但确保不要以错误的方式改变状态,这会导致你无限循环

我认为MapStateTops是一个很好的选择,试试吧

另外,请告诉我您是如何更改道具的,即事件在何处处理

最后,如果我误解了你,请原谅我。
很高兴提供帮助:)

MapStateTrops是否显示为Redux函数?我没有使用Redux.static getDerivedStateFromProps(props){是否有可用于此查询的数据。您是否在游乐场中使用这些变量对此进行了检查..?是的,有可用数据,是的,在游乐场中返回值。
searchProducts
未在
data
上定义,因为它在第一个道具更改时根本没有触及后端。传递给
查询的变量
如上所述进行了更改,因此我认为这不是重新渲染的问题。您在哪里更改道具。
PROPS {"brand":["Google"]}

VARIABLES {"brand":["Google"]}

DATA {}

SEARCH PRODUCTS undefined