2017-06-17 80 views
0

使用@include指示我有使用@include(if: $variable)有條件地提取一些領域的繼電器容器,但我寫的每一個人領域的指令:爲多個字段

const relayOptions = { 
    initialVariables: { 
    expandDetails: false, 
    }, 
    fragments: { 
    company: Relay.QL` 
     fragment on Company { 
     id 
     name 
     employees @include(if: $expandDetails) { 
      fullName 
     } 
     admins @include(if: $expandDetails) { 
      fullName 
     } 
     departments @include(if: $expandDetails) { 
      name 
     } 
     } 
    `, 
    }, 
} 

有什麼辦法,我可以寫指令只有一次,例如像這樣(我知道這個代碼將無法正常工作):

const relayOptions = { 
    initialVariables: { 
    expandDetails: false, 
    }, 
    fragments: { 
    company: Relay.QL` 
     fragment on Company { 
     id 
     name 
     @include(if: $expandDetails) { 
      employees { 
      fullName 
      } 
      admins { 
      fullName 
      } 
      departments { 
      name 
      } 
     } 
     } 
    `, 
    }, 
} 

我嘗試了一些其他的瘋狂方式,但他們沒有工作,我得到這個錯誤:

'@include' can't be applied to fragment definitions (allowed: fields, fragment spreads, inline fragments)

編輯:注:我需要這樣做,以避免不必要的數據提取。如果展開數據的可摺疊組件已擴展(我打算在安裝組件後使用setVariables進行此操作),我只想抓取數據。 在這個例子中,只有3個條件字段,但在實際情況下,我試圖解決的問題還有很多。

回答

1

你可以把內嵌片段的指令,並且只使用相同類型的外場:

fragment on Company { 
    ... on Company @include(if: $expandDetails) { 
    employees { fullName } 
    admins { fullName } 
    departments { fullName } 
    } 
}