Подтвердить что ты не робот

Реле: как слить, а не переопределять запросы во вложенных маршрутах?

Я не могу перейти к /users в своем приложении, потому что он не запускает выборку всех запросов, которые я ожидаю от нее.

Мое приложение состоит из компонента 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 определили смещения, и кажется, что отправляется только запрос UserList.

Фрагмент App:

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 на запрос как users, так и loggedInUser?

Обновление

Я использую [email protected] и [email protected]

Обновление # 2

Это единственный запрос, который Relay генерирует при посещении "/users" и который отправляется на сервер:

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
}

Ответ соответствует запросу:

Ответ с сервера

4b9b3361

Ответ 1

Я совершенно не уверен, но я бы сделал так:

фрагмент приложения:

fragments: {
  viewer: () => {
    return Relay.QL`
      fragment on ViewerType {
        loggedInUser {
          id
        }
        ${UserList.getFragment("viewer")}
      }
    `;
  };
}

Я думаю, что этот пример repo будет полезен для вас: https://github.com/taion/relay-todomvc/blob/master/src/components/TodoApp.js#L60-69