forceFetch конкретный фрагмент из контейнера Relay

Если в контейнере несколько фрагментов, как я могу forceFetch только один из них?

Relay.createContainer(MyContainerComponent, {
    fragments: {
        fragment1: () => Relay.QL`my first fragment`,
        fragment2: () => Relay.QL`my second fragment`
    } 
});

Согласно документации, вызов this.props.relay.forceFetch() обновит все фрагменты, связанные с контейнером.

В то время как принудительная выборка «как есть» выполняет свою работу, весь смысл Relay состоит в том, чтобы избежать избыточной / недостаточной выборки.

Любой совет ?


person Kamek    schedule 27.06.2016    source источник


Ответы (1)


Контейнер управляет повторными запросами, поэтому одним из решений может быть следующее:

Relay.createContainer(MyContainerComponent, {
    fragments: {
        fragment1: () => Relay.QL`fragment on SomeThing { ${SomeThingContainer.getFragment("something")}`,
        fragment2: () => Relay.QL`fragment on OtherThing { ${OtherThingContainer.getFragment("otherthing")}`
    } 
});

Затем просто используйте два субконтейнера для повторной загрузки их отдельных фрагментов.

Если вам действительно нужны данные из обоих фрагментов в MyContainerComponent, поэтому вы не можете разделить их на субконтейнеры, для меня имеет смысл повторная выборка полного фрагмента контейнера ...

Однако, если вам действительно нужны данные из обоих фрагментов, и вы действительно хотите получить только один из них, вы всегда можете использовать императивный Store API для выполнения специального запроса. для чего угодно. Подробности см. В этом вопросе.

В СТОРОНЕ:

весь смысл Relay состоит в том, чтобы избежать чрезмерной / недостаточной выборки

Я не согласен ... Это, конечно, долгожданное преимущество, но настоящая «точка» - это декларативная структура для передачи данных вашим компонентам. Нет, правда, простого декларативного API для извлечения отдельных фрагментов контейнера. Может быть, должно быть! Но я думаю, что скорее всего вы здесь преждевременно оптимизируете :)

person NevilleS    schedule 07.07.2016
comment
Спасибо, NevilleS, я определенно занимаюсь микрооптимизацией, но, конечно же, приятно знать, что Relay не встанет у меня на пути, если мне действительно нужно делать такие вещи. - person Kamek; 10.07.2016