我无法浏览到我的应用程序中的/用户,因为它不会触发提取我所期望的所有查询.
我的应用程序包含一个App组件和一些包含实际内容(如Dashboard或UserList)的组件.还有一个EnsureAuthenticationContainer,但这只是一个组件,当用户进行身份验证时,只需简单地呈现它的子代.这是我的路线设置:
const ViewerQueries = { viewer: () => Relay.QL`query { viewer }` };
[…]
<Router history={browserHistory} render={applyRouterMiddleware(useRelay.default)} environment={Relay.Store}> <Route path="/" component={App} queries={ViewerQueries}> <Route path="login" component={Login} /> <Route component={EnsureAuthenticationContainer}> <IndexRoute component={Dashboard} /> <Route path="users" component={UserList} queries={ViewerQueries} /> <many more routes /> </Route> </Route> </Router>
问题是,App和UserList都已经定义了fragements,似乎只发送UserList的查询.
片段:
fragments: { viewer: () => { return Relay.QL` fragment on ViewerType { loggedInUser { id } } `; } }
UserList片段:
fragments: { viewer: () => Relay.QL` fragment on ViewerType { id,users(first: $limit) { edges { node { id,userName,firstName,lastName,eMail } } } } `,}
如何设置React / Relay / Router查询用户和loggedInUser?
更新
我使用react-router@3.0.5和react-router-relay@0.13.7
更新#2
当我访问“/ users”并发送到服务器时,这是继电器产生的唯一查询:
query Index { viewer { id,...F0 } } fragment F0 on ViewerType { _users2quBPZ:users(first:100) { edges { node { id,eMail },cursor },pageInfo { hasNextPage,hasPrevIoUsPage } },id }
响应匹配查询:
解决方法
我完全不确定,但我会这样做:
应用程序片段:
fragments: { viewer: () => { return Relay.QL` fragment on ViewerType { loggedInUser { id } ${UserList.getFragment("viewer")} } `; }; }
我认为这个例子是对你有帮助的:https://github.com/taion/relay-todomvc/blob/master/src/components/TodoApp.js#L60-69