Одностраничные переменные общего доступа к приложениям

В настоящее время я экспериментирую с одностраничной реализацией приложения, которая состоит из компонента Layout и обменивает многочисленные компоненты Page, вложенные внутри. Контейнеры Relay в Layout и многочисленные страницы разделяют переменные (в этом примере $groupId), которые используются для фильтрации запросов по их фрагментам.

Проблема в том, что текущая реализация отправляет два запроса для каждого активного маршрута вместо одного. Возможно, я подхожу к этому неправильно, но как я могу объединить запросы или структурировать приложение, чтобы выдать только один setVariable({groupId: ... }) обновит оба компонента вместо того, чтобы устанавливать переменные для обоих компонентов отдельно.

Конфигурация маршрута

<Route path="/" component={Layout} queries={ViewerQuery} render=  {renderer(Layout)}>
  <IndexRoute component={DashboardPage} queries={ViewerQuery}/>
  ...
</Route>

Запрос зрителя

export default {
  viewer: (Component, variables) => Relay.QL`query { 
    viewer {
      ${Component.getFragment("viewer", variables)}
    }
  } 
  `
};

раскладка

export default Relay.createContainer(Layout, {
  initialVariables: {
    groupId: null
  },
  fragments: {
    viewer: () => Relay.QL`
      fragment on User {
        username
        group(id: $groupId) {
          description
        }
      }
    `
  }
});

Страница панели инструментов

export default Relay.createContainer(DashboardPage, {
  initialVariables: {
    groupId: null
  },
  fragments: {
    viewer: () => Relay.QL`
      fragment on User {
        group(id: $groupId) {
          ${SubComponent.getFragment('data')}
        }
      }
    `
  }
});

1 ответ

Вам необходимо использовать пакетный сетевой уровень. Посмотрите либо уровень response-relay-network-layer, либо мой форк уровня стандартной сети (который также требует моего форка express-graphql).

Другие вопросы по тегам