Javascript 中继:如何合并而不是覆盖嵌套路由中的查询?
我无法在我的应用程序中导航到Javascript 中继:如何合并而不是覆盖嵌套路由中的查询?,javascript,reactjs,graphql-js,relayjs,react-router-relay,Javascript,Reactjs,Graphql Js,Relayjs,React Router Relay,我无法在我的应用程序中导航到/users,因为它不会触发我所期望的所有查询的获取 我的应用程序由一个app组件和一些包含实际内容的组件组成,如Dashboard或UserList。还有一个EnsureAuthenticationContainer,但这只是一个组件,当用户通过身份验证时,它只会呈现其子级。这是我的路线设置: const ViewerQueries = { viewer: () => Relay.QL`query { viewer }` }; [……] 用户列表的片
/users
,因为它不会触发我所期望的所有查询的获取
我的应用程序由一个app
组件和一些包含实际内容的组件组成,如Dashboard
或UserList
。还有一个EnsureAuthenticationContainer
,但这只是一个组件,当用户通过身份验证时,它只会呈现其子级。这是我的路线设置:
const ViewerQueries = {
viewer: () => Relay.QL`query { viewer }`
};
[……]
用户列表的片段
:
fragments: {
viewer: () => Relay.QL`
fragment on ViewerType {
id,
users(first: $limit) {
edges {
node {
id,
userName,
firstName,
lastName,
eMail
}
}
}
}
`,
}
如何设置React/Relay/Router来查询用户
和日志用户
更新
我用react-router@3.0.5和反应路由器-relay@0.13.7
更新#2
这是我访问“/用户”时生成的唯一查询中继,并发送到服务器:
query Index {
viewer {
id,
...F0
}
}
fragment F0 on ViewerType {
_users2quBPZ:users(first:100) {
edges {
node {
id,
userName,
firstName,
lastName,
eMail
},
cursor
},
pageInfo {
hasNextPage,
hasPreviousPage
}
},
id
}
响应与查询匹配:
我完全不确定,但我会这样做: 应用程序片段:
fragments: {
viewer: () => {
return Relay.QL`
fragment on ViewerType {
loggedInUser {
id
}
${UserList.getFragment("viewer")}
}
`;
};
}
我认为这个回购示例将对您有所帮助:谢谢您的回答。但是,当我的应用程序除了用户列表之外还包含更多的路由时,你的解决方案不会破坏应用程序的片段吗?我不这么认为,因为“react路由器中继将自动生成一个包含来自活动react路由器路由的所有查询和参数的组合中继查询配置,然后将查询结果传递给每个路由组件”。()谢谢。我刚刚尝试过,但导航到”/“将
users
字段触发为查询,尽管组件不打算呈现。是否使用const UsersQueries={viewer:()=>Relay.QL
query{viewer{users}}更改路由中的querys
prop
工作?不,它不会改变任何东西。你在“网络”选项卡中的输出是什么(假设你使用Chrome)?只有一两个问题吗?请发布请求负载和响应。是的,只有一个查询。我刚刚发布了中继生成的内容和服务器返回的内容。为什么不在userList
查询下添加loggedInUser{id}
?中继没有获取loggedInUser
,因为您的活动组件(UserList
)没有请求它。UserList
组件不知道也不应该知道有关登录用户的任何信息。即使我将loggedInUser
添加到它,App
,它打算显示当前用户,但它仍然不会作为prop注入loggedInUser
。
query Index {
viewer {
id,
...F0
}
}
fragment F0 on ViewerType {
_users2quBPZ:users(first:100) {
edges {
node {
id,
userName,
firstName,
lastName,
eMail
},
cursor
},
pageInfo {
hasNextPage,
hasPreviousPage
}
},
id
}
fragments: {
viewer: () => {
return Relay.QL`
fragment on ViewerType {
loggedInUser {
id
}
${UserList.getFragment("viewer")}
}
`;
};
}