Javascript Apollo React客户端-查询组件不';t在第一个道具/变量更改时返回后端-在所有后续更改时返回后端
我有一个Apollo查询组件。它的查询变量由页面组件通过URL上的查询字符串定义,然后通过props传递给查询组件 包含查询的组件由以下MWE表示: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
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