Reactjs 中继不工作时响应本机graphql查询
我对这个问题有点不知所措,所以任何帮助都将不胜感激!下面是我想要发送的查询:Reactjs 中继不工作时响应本机graphql查询,reactjs,react-native,graphql,relayjs,Reactjs,React Native,Graphql,Relayjs,我对这个问题有点不知所措,所以任何帮助都将不胜感激!下面是我想要发送的查询: query { viewer{ search_places(lat: "40.7127", lng: "-74.0059", searchType:"all", searchTerm:"shopping"){ edges{ node{ id, name, lat, lng }
query {
viewer{
search_places(lat: "40.7127", lng: "-74.0059", searchType:"all", searchTerm:"shopping"){
edges{
node{
id,
name,
lat,
lng
}
}
}
}
}
到目前为止还不错,当我在GraphiQL上尝试这个查询时,它正在工作。此查询返回一个PlaceConnection对象。现在,我尝试在React Native with Relay上实现相同的功能:
class SearchPlacesRoute extends Route {
static paramDefinitions = {
lat : { required: true },
lng : { required: true },
searchType : { required: true },
searchTerm : { required: true }
}
static queries = {
search_places: () => Relay.QL`
query {
viewer{
search_places(lat: $lat, lng: $lng, searchType: $searchType, searchTerm: $searchTerm)
}
}
`
}
static routeName = 'SearchPlacesRoute'
}
class SearchPlacesComponent extends Component {
render () {
const places = this.props.search_places;
console.log(places);
for (var index = 0; index < places.length; index++) {
var element = places[index];
console.log(element);
}
return (
<View>
<Text>email: {places[0].name}</Text>
</View>
)
}
}
SearchPlacesComponent = Relay.createContainer(SearchPlacesComponent, {
fragments: {
search_places: () => Relay.QL`
fragment on PlaceConnection {
edges
{
node
{
id,
name,
lat,
lng
}
}
}
`
}
})
<RootContainer
Component={SearchPlacesComponent}
route={new SearchPlacesRoute({lat:"40.7127", lng: "-74.0059", searchType:"all",searchTerm: "shopping"})}
renderFetched={(data) => <SearchPlaces {...this.props} {...data} />}/>
所以我检查了实际发送到服务器的内容:
在我看来,片段是作为单独的查询而不是选择发送的。你知道为什么会发生这种情况,或者我如何避免这种行为吗
编辑:
以下是我的最终代码-希望对某些人有所帮助:
我认为问题在于你的接力路线太深了。相反,请定义您的路线,以便仅查询
查看器
:
class SearchPlacesRoute extends Route {
static queries = {
viewer: () => Relay.QL`
query {
viewer
}
`
}
static routeName = 'SearchPlacesRoute'
}
然后,在组件内部,将其定义为查看器上的片段,而不是PlaceConnection上的:
SearchPlacesComponent = Relay.createContainer(SearchPlacesComponent, {
initialVariables: { lat: "..." /* TODO */ },
fragments: {
viewer: () => Relay.QL`
fragment on viewer {
search_places(lat: $lat, lng: $lng, searchType: $searchType, searchTerm: $searchTerm) {
edges
{
node
{
id,
name,
lat,
lng
}
}
}
}
`
}
})
您需要将变量($lag
,$lng
等)移动到容器的一部分,而不是定义为路线的一部分。但我认为这应该能解决你的问题。你是我的人@ryan!感谢您提供的信息-我终于根据您的答案运行了查询。将发布我的全部代码。还有一个问题:您在名为search\u places
的连接上提供了edges
字段,但没有提供执行此操作所需的参数。使用find
、first
或last
参数。对于如何设置这些值,您有什么建议吗?这不是必须由中继自动完成吗?因此中继要求您使用first
或last
参数,尽管GraphQL不这样做。例如,您需要将其添加到search\u places(first:100)
,以获取前100个搜索位置。如果您想要所有这些,可以使用类似于first:99999999
的变通方法。
SearchPlacesComponent = Relay.createContainer(SearchPlacesComponent, {
initialVariables: { lat: "..." /* TODO */ },
fragments: {
viewer: () => Relay.QL`
fragment on viewer {
search_places(lat: $lat, lng: $lng, searchType: $searchType, searchTerm: $searchTerm) {
edges
{
node
{
id,
name,
lat,
lng
}
}
}
}
`
}
})