Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/374.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 中继:如何合并而不是覆盖嵌套路由中的查询?_Javascript_Reactjs_Graphql Js_Relayjs_React Router Relay - Fatal编程技术网

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")}
      }
    `;
  };
}