詞彙表
3D
資料驅動的依賴關係。Facebook 用來僅在特定元件實際上會被渲染時才加入程式碼的方式。典型用例包括:
- 通常為 null 的欄位,且僅在不為 null 時才會渲染。
- 聯集。例如,核心新聞提要項目有許多不同的變體,每個變體都是一個獨立的 React 元件。我們要渲染哪一個取決於資料(即「資料驅動」)。在給定的提要中,很可能不會渲染大多數變體,因此不需要下載。
- 元件可以根據資料而有不同的渲染策略。
抽象類型
GraphQL 聯集和介面是抽象類型。請參閱 介面。
抽象類型精煉
請參閱 類型精煉。如果類型精煉是一種有條件地包含欄位的方式,條件是該類型實作特定的具體類型(例如 ... on User { name }
),則抽象類型精煉指的是有條件地包含欄位,條件是該類型實作特定的抽象類型(即介面)。因此,... on Actor { field }
。
@arguments
一個 指令,用於修改 片段展開,並用於將引數(使用 @argumentDefinitions
定義)傳遞至該片段。
...Story_story @arguments(storyId: "1234")
@argumentDefinitions
一個指令,用於修改片段定義,並定義片段可接收的本機引數名稱及其類型。
fragment Store_story on Story
@argumentDefinitions(storyId: {type: "ID!"}) {
# etc
}
如果變數在片段中使用,但未包含在 @argumentDefinitions
指令中,則 Relay 會要求該片段僅在宣告這些變數的查詢中展開,或在最終在這種查詢中展開的片段中展開。
成品
由 Relay 編譯器產生的檔案,通常以 .graphql.js
結尾。
AST
抽象語法樹。在 Relay 中,有兩種 AST 類型:正規化 和 讀取器 AST。
.graphql.js
檔案的預設匯出是一個 AST。
Relay 編譯器會剖析並轉換 GraphQL 常值,並產生 Relay AST(請參閱 成品)。在編譯時執行此工作可讓 Relay 執行階段更快。
可用性
可用性的概念指的是商店中是否有足夠的非過時、非失效的資料可立即滿足特定請求,或是是否需要向伺服器發出請求才能滿足該請求。
Babel 轉換
Javascript 程式碼的建置階段轉換,可將呼叫轉換為
graphql`...`
轉換為 require(NAME_OF_GENERATED_ARTIFACT)
呼叫。
用戶端結構描述擴充
GraphQL 規範可讓您在本機定義新的類型、類型的新欄位、新的指令等。
Relay 支援在用戶端結構描述擴充檔案中加入類型和欄位。開發人員使用此功能來加入包含與圖表項目相關聯的純本機狀態的欄位。例如,User
上的 is_selected
欄位。
CacheConfig
用於控制如何快取查詢回應的值。最終會傳遞至 environment.execute
。
檢查
商店的核心功能之一。在給定操作的情況下,判斷商店是否擁有渲染該操作所需的所有資料。呼叫 DataChecker.check
,後者以同步方式從與操作相關聯的根節點開始,並逐步處理商店中的資料。
實際上,會以 environment
上的方法的形式公開。
與提取原則結合使用,由 loadQuery
(和其他方法)用來判斷是否有必要發出網路請求呼叫以滿足查詢。
提交
收到網路回應後,酬載會被提交或寫入商店。
提交也是用於描述啟動變更並將其資料寫入商店的動詞。
編譯器
掃描 Javascript 檔案以尋找 graphql
標籤節點,並產生適當檔案(.graphql.js
檔案、$Parameters.js
檔案等)的程式碼片段。
編譯器的產生輸出會被提交並簽入儲存庫。
具體請求
代表查詢、訂閱或變更的抽象語法樹。
對應於查詢、訂閱或變更的 .graphql.js
檔案的預設匯出。
此外,對 graphql
...`` 的呼叫會在建置階段透過 Relay Babel 轉換轉換為具體請求。
請參閱可預先載入的具體請求中的重要安全注意事項。
組態
檔案或 javascript 物件,除其他事項外,可控制 Relay 編譯器為您的專案掃描哪些檔案。
@connection
一個指令,用於宣告欄位實作 連線 規格。
連線
實作 [連線規格](https://relay.dev.org.tw/graphql/connections.htm) 的欄位。請參閱導覽中關於渲染清單資料和分頁的章節。另請參閱 usePaginationFragment
。
容器
一個術語,用於描述高階元件,該元件為子元件提供來自查詢和片段的資料。與 Relay Modern 相關聯。
您應盡可能使用 Relay Hooks API。
資料檢查器
一個類別,公開單一方法 check
,後者以同步方式從與操作相關聯的根節點開始,並逐步處理商店中的資料。它判斷商店中的資料是否足以滿足給定的操作。
由 store.check
呼叫。
DataID
記錄的全域唯一識別碼。可以在用戶端上使用 遺失欄位處理常式產生。通常對應於 Ent 的 ID(如果有的話),但保證等於 __id
欄位的值。
updater
和 optimisticUpdater
函式會被傳遞 RelaySourceSelectorProxy
的執行個體。在 RelaySourceSelectorProxy
上使用 DataID 呼叫 .get(id)
將會在商店中查找該項目,並傳回其 Proxy。
資料遮罩
指的是元件不應能夠存取其在片段或查詢中未宣告的任何資料,即使是不小心也一樣。這可防止元件之間的資料意外耦合,並表示每個元件都可以獨立重構。這消除了在子元件中移除欄位會意外中斷不同元件的風險,從而允許元件以穩定基礎架構快速移動。
也指的是根據該概念,從其父項隱藏子元件的資料的作法。
在 Relay 中,如果宣告一個查詢像這樣:query FooQuery { viewer { ...subcomponent_``viewer_name } }
,若沒有存取代表 subcomponent_viewer_name
片段的 ReaderFragment
,就無法存取 subcomponent_viewer_name
宣告的資料。
請參閱Relay 設計原則指南。
@defer
這是一個可以加到片段展開或內聯片段的指令,用來避免等待該片段的資料。詳情請參閱 GraphQL 的 @defer 指令文件。
定義 (Definition)
在編譯器中,「定義」指的是 GraphQL 字串中定義操作或片段的文字。
描述符 (Descriptor)
可以指 OperationDescriptor
或 RequestDescriptor
。描述符是 Relay 程式碼內部使用的類型,通常指包含唯一識別操作或請求所需最少資訊的物件,例如 (對於 RequestIdentifier
),一個節點、識別符和變數。
開發工具 (DevTools)
這是一個超棒的 Chrome 擴充功能,用於除錯 Relay 網路請求、Relay 儲存體和 Relay 事件。對於回答「為什麼我沒有看到我預期的資料?」、「為什麼這個元件暫停了?」等問題很有幫助。
請參閱文件。
文件 (Document)
在編譯器中,「文件」指的是包含一個或多個操作或片段定義的 GraphQL 字串。Relay 要求 JavaScript 檔案中的 GraphQL 字串包含單一的定義。
指令 (Directive)
一個特殊的指令,以 @
開頭,包含在 graphql
字串或 graphql 檔案中,為 Relay 編譯器或伺服器提供特殊指示。例如 @defer
、@stream
和 @match
。
可處置 (Disposable)
任何包含 .dispose
方法的物件,該方法不接收任何參數且沒有回傳值。Relay 中的許多物件 (例如查詢參考和入口點參考),以及許多方法的回傳值 (例如呼叫 .subscribe
或 .retain
) 都是可處置的。
入口點 (Entrypoint)
一個輕量級的物件,包含需要載入的元件資訊 (以呼叫 JSResource
的形式) 和需要在特定路由、彈出視窗或其他條件載入的 UI 渲染之前載入的查詢 (以可預先載入的具體請求的形式)。
UI 初始渲染所需的所有查詢都應包含在該 UI 的入口點中。
入口點可以包含查詢和其他入口點。
另請參閱可預先載入的具體請求和JSResource。
環境 (Environment)
一個將許多其他 Relay 物件結合在一起的物件,其中最重要的是儲存體和網路。它還包括發布佇列、操作載入器、排程器和遺失欄位處理器。
使用 RelayEnvironmentProvider
設定,並透過 React 上下文向下傳遞。
所有非內部的 Relay Hook 都需要在 Relay 環境上下文內呼叫。
執行 (Execute)
執行查詢、變異或訂閱 (統稱為操作) 大致意味著「建立一個惰性可觀察對象,當訂閱時,將發出一個網路請求來完成操作,並將回傳的資料寫入儲存體。」
Relay 環境公開了各種 execute
方法。
提取策略 (Fetch Policy)
一個字串,決定在什麼情況下發出網路請求,在什麼情況下使用儲存體中的資料來完成查詢 (如果有的話)。可以是 network-only
、store-and-network
、store-or-network
或 store-only
。(某些方法不接受所有提取策略。)
欄位 (Field)
基本上,任何你可以使用查詢、變異、訂閱或片段選擇的內容。例如,viewer
、comment_create(input: $CommentCreateData)
和 name
都是欄位。
GraphQL 綱要包含許多欄位。
片段 (Fragment)
片段是一個多載詞,在 Relay 中至少有兩種不同的含義。
作為 GraphQL 概念的片段
GraphQL 的基本可重複使用單元。與查詢、訂閱和變異不同,片段無法單獨查詢,必須嵌入到請求中。
片段可以展開到查詢、變異、訂閱和其他片段中。
片段可以是獨立的 (例如 fragment Component_user on User { name }
) 或內聯的,例如 query MyQuery { node(id: $id) { ... on User { name } } }
中的 ... on User { name }
。
片段始終定義在特定的類型 (範例中的 User
) 上,這定義了可以在其中選擇哪些欄位。
Relay 中的片段
在 Relay 中,片段指的是為給定的片段/操作讀出的欄位。該術語也常被用來指讀取器 AST。因此,例如,以下查詢和片段可能具有相同的讀取器 AST
query Foo {
actor { name }
}
fragment Bar on Query {
actor { name }
}
片段識別符 (Fragment Identifier)
一個字串,提供足夠的資訊來提供特定片段的資料。例如
1234{"scale":2}/Story_story/{"scale":2}/"4567"
這通過其持久 ID (1234
) 來識別,後跟它接受的變數,然後是 Story_story
片段 (沒有持久 ID) 和它使用的變數,然後是任何引用的 Story 的資料 ID (可能是 id
欄位)。
片段參考 (Fragment Reference)
傳遞給 useFragment
的參數。通過存取在另一個查詢、片段、訂閱或變異中展開片段的值來獲得。例如,
const queryData = usePreloadedQuery(
graphql`query ComponentQuery { viewer { account_user { ...Component_name } } }`,
{},
);
// queryData.viewer is the FragmentReference
// Though this would usually happen in another file, you can
// extract the value of Component_name as follows:
const fragmentData = useFragment(
graphql`fragment Component_name on User { name }`,
queryData?.viewer?.account_user,
);
就像可以使用查詢參考和描述查詢的 graphql 標籤字串 (即具體請求) 來存取查詢的資料一樣,可以使用片段參考和描述片段的 graphql 標籤字串 (即讀取器片段) 來存取從片段引用的資料。
片段資源 (Fragment Resource)
一個內部類別,支援延遲載入查詢。公開兩個重要方法
read
,旨在元件的渲染階段呼叫。它會嘗試從儲存體中完成查詢 (通過呼叫environment.lookup
),如果資料不可用則會暫停。它還將嘗試讀取的結果 (無論是 Promise、錯誤還是結果) 寫入內部快取,並在 Promise 成功或失敗時更新該快取值。subscribe
,在提交階段呼叫,並建立與 Relay 儲存體的訂閱。
如果呼叫 .read
的元件成功載入查詢,但在提交之前在後續 Hook 上暫停,則該查詢的資料可能會在元件最終渲染之前被垃圾回收。因此,依賴 FragmentResource
的元件有呈現 Null 資料的風險。
與查詢資源比較。
片段規格解析器 (Fragment Spec Resolver)
待辦
片段展開 (Fragment Spread)
片段展開是指一個片段如何包含在查詢、訂閱、變異或其他片段中。在以下範例中,...Component_name
是一個片段展開
query ComponentQuery {
viewer {
account_user {
...Component_name
}
}
}
為了使片段在特定位置展開,類型必須匹配。例如,如果 Component_name
定義如下:fragment Component_name on User { name }
,則此展開將有效,因為 viewer.account_user
的類型為 User
。
垃圾回收 (Garbage Collection)
Relay 可以定期從不再保留的查詢中垃圾回收資料。
請參閱導覽以獲取更多資訊。
GraphQLTaggedNode
這是呼叫的類型
graphql`...`
它是 ReaderFragment、ReaderInlineDataFragment、ConcreteRequest 和 ConcreteUpdatableQuery 的聯合類型。
請注意,可以將 Flow 配置為理解 GraphQL 字串的類型是產生的 .graphql.js
檔案的預設匯出類型。
處理器 (Handler)
待辦
ID
Relay 特別處理 ID。特別是,它會執行以下兩件事
- 編譯器會在
id
欄位類型為ID
或ID!
的每個類型上自動新增id
欄位的選擇。 - 當正規化資料時,如果物件具有
id
屬性,則該欄位會被用作其在儲存體中的 ID。
在 schema 中,有些類型的 id
欄位並非 ID
或 ID!
類型(例如,類型為 string
或 number
)。如果使用者自行選擇此欄位,則會將此欄位用作 id。這是非預期且不正確的行為。
@include
一個指令,會新增至欄位、內嵌片段和片段擴展,並允許有條件的包含。它是 @skip
指令的反向操作。
在編譯器中,@include
/@skip
指令會被特殊處理,並產生 Condition
節點。
@inline
一個套用至片段的指令,讓開發人員能夠將遮罩資料傳遞至在 React 渲染階段之外執行的函式。
通常,資料會使用 useFragment
讀取。但是,此函式只能在渲染階段呼叫。如果需要在渲染階段之外使用 store 資料,開發人員有幾種選擇
- 在渲染階段讀取資料,並將其傳遞至函式/讓函式關閉該資料。(另請參閱[#relay])
- 傳遞
@inline
片段的參考,然後可以使用readInlineData
函式存取該片段(在渲染階段之外)。
這個指令會導致它們在讀取父片段時被讀取出來,並透過呼叫 readInlineData
解除遮罩。
介面 (GraphQL)
介面是一種抽象類型,包含類型必須實作才能實作介面的一組特定欄位。
您可以將介面上的片段擴展到具體類型(例如 query MyQuery { viewer { account_user { ...on Actor { can_viewer_message } } }
),或將具體類型上的片段擴展到介面上(例如 query MyQuery { node(id: 4) { ... on User { name } } }
)。您不再允許將介面上的片段擴展到介面上。
另請參閱抽象類型精煉。
失效
在某些情況下,很容易確定 mutation 的結果。例如,如果您「喜歡」一個 Feedback,喜歡計數將會遞增,且 viewer_did_like
將會設定為 true。但是,在其他情況下,例如您封鎖另一位使用者時,很難確定對 store 中資料的完整影響。
對於這種情況,Relay 允許您使記錄(或整個 store)失效,這會導致下次渲染時重新提取資料。
請參閱指南中的章節。
JSResource
一個輕量級 API,用於指定應按需載入 React 元件,而不是與第一個 require 捆綁在一起(如果您直接匯入或 require 它,就會發生這種情況。)
此 API 可安全地在入口點檔案中使用。
請參閱 [npm 模組](https://www.npmjs.com/package/jsresource)。延遲載入
如果在渲染時發生資料請求,則查詢或入口點會延遲載入。
延遲載入的查詢和入口點有效能上的缺點、容易過度或不足提取,並可能導致使用 null 資料渲染元件。應避免使用它們。
連結記錄
連結記錄是可直接從另一個記錄存取的記錄。例如,在查詢 query MyQuery { viewer { account_user { active_instant_game { id } } } }
中,active_instant_game
(類型為 Application
)是 account_user
的連結記錄。
連結記錄本身無法查詢,但必須透過選取其上的子欄位來查詢。
與 值 比較。
文字
GraphQL 文字是對以下程式碼的呼叫:
graphql`...`
在您的程式碼中。這些會被預先處理,並在建置時替換為包含文字內容 AST 表示的 GraphQLTaggedNode。
@live
一個可新增以將 Relay 解析器標記為 live 的 docblock 標籤。若要瞭解更多資訊,請參閱 Relay 解析器文件中的 live 欄位章節。
Lookup
Relay store 公開的主要方法之一。使用 讀取器選擇器,它會遍歷 store 中的資料並傳回一個 快照,其中包含正在讀取的資料,以及有關資料是否遺失和其他資訊片段的資訊。也透過 Relay 環境公開。
呼叫 Reader.read
。
@match
一個指令,與 @module 搭配使用時,允許使用者在以 @match 修飾的欄位具有特定類型時,連同其餘 GraphQL 酬載一起下載特定 JS 元件。請參閱 3D。
MatchContainer
一個元件,會渲染與以 @match 指令修飾的欄位一起傳回的元件。請參閱 3D。
遺失欄位處理常式
一個函式,為欄位(用於單數和複數連結欄位)和預設值(用於純量欄位)提供 DataID。
例如,您可能已經提取了 id 為 4 的項目,並且正在執行一個選取 node(id: 4)
的查詢。如果沒有遺失欄位處理常式,Relay 將不知道 id 為 4 的項目將由 node(id: 4)
傳回,因此會嘗試透過網路提取此資料。提供遺失欄位處理常式可以通知 Relay 此選取的結果存在於 id: 4,從而允許 Relay 避免網路請求。
getRelayFBMissingFieldHandlers.js
提供此處理常式和其他遺失欄位處理常式。
@module
一個指令,與 @match 搭配使用時,允許使用者指定如果以 @match 修飾的欄位具有特定類型,則要下載哪些 JS 元件。請參閱 3D。
模組
待辦
Mutation
mutation 是兩件事的組合:後端上的 mutation,然後是對更新資料的查詢。
請參閱[關於 mutation 的指南](../guided-tour/updating-data/graphql-mutations)。Mutation 根查詢
mutation 查詢的根物件。在 updater
或 optimisticUpdater
中,呼叫 store.getRootField('field_name')
將會傳回來自名為 field_name
的 mutation 根查詢的物件。
此物件上公開的欄位與查詢可用的欄位不相同,並且在不同的 mutation 中有所不同。
網路
Relay 環境包含一個 network
物件,該物件公開單一 execute
函式。Relay 啟動的所有網路請求都將通過此程式碼片段。
這提供了一個方便的地方來處理跨領域的關注點,例如驗證和授權。
節點
待辦
正規化
正規化是將巢狀資料(例如伺服器回應)轉換為扁平資料(這是 Relay 將其儲存在 store 中的方式)的過程。
請參閱回應正規化器。
正規化 AST
一個 AST,與一個 操作 相關聯,該操作(與 變數 結合使用)可用於
- 將網路酬載寫入 store、
- 將樂觀回應寫入 store、
- 確定是否可以從 store 中的資料滿足查詢,以及
- 確定 store 中哪些記錄是可觸及的(用於垃圾收集)。
與 讀取器 AST 不同,正規化 AST 包含巢狀片段內容的相關資訊。
與操作關聯的產生成品(例如,FooQuery.graphql.js
)同時包含正規化 AST 和讀取器 AST。
正規化選擇器
選擇器定義了圖形遍歷的起點,以便針對子圖、組合 GraphQL 片段、變數以及應該從中進行遍歷的根物件的資料 ID。
通知
store 公開的方法,將會通知每個資料已修改的 訂閱者。導致正在渲染已修改資料的元件以新資料重新渲染。
Observable
Relay 中用於表示目前可能存在但可能僅在未來才可用的資料的基本抽象概念。
Observable 與 promise 的不同之處在於,如果 observable 中的資料已經載入,則您可以如下同步存取它:
const completedObservable = Observable.from("Relay is awesome!");
let valueFromObservable;
observable.subscribe({
next: (value) => {
valueFromObservable = value;
/* this will execute in the same tick */
},
});
console.log(valueFromObservable); // logs out "Relay is awesome!"
這是有利的,因為它允許 Relay hook 在 store 中已存在資料時不暫停。
在 Relay 中,observable 是 RxJS Observable 的部分實作。
操作 (Operation)
在 GraphQL 中,指的是查詢 (query)、訂閱 (subscription) 或變更 (mutation)。
在 Relay 中,每個操作也都有一個相關聯的片段 (fragment)。因此,一個準確的心智模型是,操作是片段,其類型條件 (type condition)是它們位於查詢/變更/訂閱 (Query/Mutation/Subscription)上,並且 Relay 知道如何發出網路請求。
操作描述符 (Operation Descriptor)
通俗地說,操作描述符是一個操作和變數。
操作描述符的 Flowtype 包含了 Relay 需要處理資料的三個資訊:讀取器選擇器 (reader selector)、一個正規化選擇器 (normalization selector)和一個請求描述符 (request descriptor)。
變數會經過篩選,排除不需要的變數,並填入缺失變數的預設值,從而確保以不相關方式不同的請求會使用相同的請求 ID 進行快取。
操作模擬解析器 (Operation Mock Resolver)
一個接收操作描述符並返回網路回應或錯誤的函數,用於測試時。
操作追蹤器 (Operation Tracker)
待辦
樂觀更新 (Optimistic Update)
待辦
樂觀更新器 (Optimistic Updater)
待辦
分頁 (Pagination)
分批查詢資料列表(連線 (connection))稱為分頁。
請參閱 graphql 文件和我們的導覽。
酬載 (Payload)
從 GraphQL 伺服器返回的值,作為請求回應的一部分。
複數字段 (Plural Field)
值為值 (values)或記錄 (records)的陣列的欄位。
@preloadable
一個修改查詢的指令,使 Relay 生成 $Parameters.js
檔案和可預載的具體請求。如果查詢要作為進入點的一部分使用,則為必要。
可預載的具體請求 (Preloadable Concrete Request)
一個小巧輕量的物件,提供足夠的資訊來啟動查詢並提取完整的查詢 AST (ConcreteRequest
)。只有在查詢標註 @preloadable
時才會產生此物件,並且是 $parameters.js
檔案的預設匯出。它僅針對標註 @preloadable
的查詢產生。
與具體請求 (.graphql.js
檔案的預設匯出) 不同,可預載的具體請求非常輕量。
請注意,進入點會接受可預載的具體請求或 .queries[queryName].parameters
位置中的具體請求。但是,由於具體請求不是輕量物件,因此這裡應該只包含可預載的具體請求。
另請注意,可預載查詢具有 id
欄位,而其他查詢則沒有。
可預載查詢註冊表 (Preloadable Query Registry)
一個中央註冊表,當特定的查詢 AST (具體請求) 被載入時,將執行回呼。
由於目前 React Native 中動態載入元件的限制,因此是必要的。
專案 (Project)
為了讓 Relay 處理具有 GraphQL 字面值的檔案,它必須包含在一個專案中。專案指定其適用的資料夾和評估 GraphQL 字面值的結構描述,並包含 Relay 編譯器需要的其他資訊。
效能分析器 (Profiler)
待辦
發布 (Publish)
store
公開的主要方法之一。接受一個記錄來源 (record source),從中更新儲存中的記錄。也會更新儲存中哪些記錄因發布而更新的映射。
一次或多次呼叫 publish
之後,應呼叫notify
。
發布佇列 (Publish Queue)
一個由環境內部使用的類別,用於追蹤、應用和還原擱置 (樂觀) 更新;提交用戶端更新;並提交伺服器回應。
公開諸如 commitUpdate
之類的 mutator 方法,這些方法僅在佇列中新增或移除更新,以及一個 run
方法,實際執行這些更新並呼叫 store.publish
和 store.notify
。
查詢 (Query)
GraphQL 查詢是一個可以與一組變數結合傳送到 GraphQL 伺服器的請求,以便提取一些資料。它由欄位選擇 (selection)組成,並且可能包含其他片段 (fragments)。
查詢執行器 (Query Executor)
一個類別,將來自網路 observable 的樂觀回應和網路回應正規化並發布到儲存區。
在每個回應發布到儲存區後,會呼叫 store.notify
,更新所有需要重新渲染的元件。
environment
在諸如 execute
、executeWithSource
和 executeMutation
等方法中使用。
查詢參考 (Query Reference)
待辦
查詢資源 (Query Resource)
一個類別,用於協助延遲載入查詢並公開兩個重要的方法:prepare
和 retain
。
prepare
在元件的 render 方法期間被呼叫,並將讀取現有的查詢快取值,或提取查詢並暫停。它也會將嘗試讀取的結果 (資料、資料的 Promise 或錯誤) 儲存在本機快取中。retain
在元件成功渲染後被呼叫。
如果呼叫 .prepare
的元件成功載入查詢,但在提交之前暫停在後續的 hook 上,則該查詢的資料可能會在元件最終渲染之前被垃圾回收。因此,依賴 QueryResource
的元件有渲染空資料的風險。
@raw_response_type
添加到查詢的一個指令,告訴 Relay 生成涵蓋 commitMutation
的 optimisticResponse
參數的類型。
請參閱更新資料導覽以了解更多資訊。
讀取器 (Reader)
待辦事項此章節
讀取器 AST (Reader AST)
一個AST,用於讀取在給定片段中選擇的資料。
操作 (operations)和片段 (fragments)都有讀取器 AST。
讀取器 AST 包含有關哪些片段在給定位置擴展的資訊,但與正規化 AST (normalization AST)不同,不包含有關在這些片段中選擇的欄位的資訊。
讀取器片段 (Reader Fragment)
待辦
讀取器選擇器 (Reader Selector)
一個物件,包含足夠的資訊讓儲存區遍歷其資料並建構由查詢或片段表示的物件。直觀地說,這「選擇」了物件圖的一部分。
另請參閱lookup。
記錄 (Record)
記錄是指 Relay 儲存區 (store)中任何透過ID儲存的項目。值 (Values)不是記錄;其他大部分都是。
記錄來源 (Record Source)
一個用於儲存記錄 (records)的抽象介面,以DataID作為鍵,用於表示儲存區的快取及其更新。
記錄來源選擇器 Proxy (Record Source Selector Proxy)
記錄 Proxy (Record Proxy)
請參閱儲存區文件。
參考計數 (Ref Counting)
一種追蹤有多少其他物件可以存取特定物件,並在該數字達到零時清理或處置該物件的模式。此模式在整個 Relay 程式碼庫中實作。
參考標記 (Reference Marker)
待辦
@refetchable
一個修改片段的指令,並使 Relay 為該片段產生一個查詢。
這會產生效率提升。該片段可以作為最初單個較大查詢的一部分載入 (因此只需要一個請求即可提取所有資料),但可以獨立重新提取。
@relay
一個允許您關閉資料遮罩的指令,用於複數類型。
請參閱文件。
Relay Classic
一個更舊版本的 Relay。
Relay Hooks
最易於使用、最安全的 Relay API。它依賴於暫停,並且在 React 並行模式下可以安全使用。
您不應使用 Relay Classic 或 Relay Modern 編寫新程式碼。
Relay Modern
一個較舊版本的 Relay。此版本的 Relay 具有高度關注容器的 API。
Relay 解析器 (Relay Resolvers)
Relay Resolvers 是一個實驗性的 Relay 功能,它能夠將衍生狀態建模為 Relay GraphQL 圖中的僅限客戶端的欄位。
另請參閱 Relay Resolvers 簡介。
釋放緩衝區
當查詢被釋放(不再被保留)時,它們的根節點會被儲存在一個固定大小的釋放緩衝區中,只有當釋放緩衝區空間不足時,才會被新釋放的查詢逐出。當 Relay 執行垃圾回收時,會保留釋放緩衝區中存在且未被處置的查詢。
釋放緩衝區的大小由 gcReleaseBufferSize
參數設定。
@required
一個 Relay 指令,使處理可能為 null
的值更符合人體工學。
另請參閱 @required
指南。
請求
請求指的是通過網路發出的 API 呼叫,以存取或變更一些資料,或兩者兼具。
一個查詢在發起時,可能涉及也可能不涉及發出請求,取決於查詢是否可以從 store 中滿足。
請求描述符
一個將具體請求和變數以及預先計算的請求 ID 關聯起來的物件。變數應經過篩選以排除不必要的變數,並被填充以包含缺失變數的預設值,從而確保以不相關方式不同的請求使用相同的請求 ID 進行快取。
解析器
一個重載的術語,主要指的是虛擬欄位,但偶爾也指其他事物。
當描述一個欄位時
一個解析器欄位是一個「虛擬」欄位,它由同類型上的片段參考的函數支援,該函數返回某些任意值。
一個即時解析器是一個「虛擬」欄位,它由外部資料來源支援。例如,可以使用外部解析器來公開儲存在本機儲存空間或外部 Flux store 中的某些狀態。
其他含義
回應
待辦
回應正規化器
一個類別,公開一個單一方法 normalize
。它將遍歷 API 請求中未正規化的回應,對其進行正規化,並將正規化的結果寫入給定的 MutableRecordSource
。它從查詢執行器中呼叫。
還原
待辦
保留
待辦
渲染策略
待辦
回溯
待辦
根欄位
待辦
根類型
GraphQL 規範定義了三個特殊的根類型:Query、Mutation 和 Subscription。查詢必須從 Query 根類型中選擇欄位,依此類推。
根
給定頁面或螢幕的最外層 React 元件。可以與入口點關聯。
入口點的根由指向根 React 元件模組的JSResource
引用。
純量
待辦
排程器
待辦
結構描述
給定專案中 Relay 所知的所有 GraphQL 類型的集合。
結構描述擴展
待辦
選取
「欄位選取」指的是您在存取物件時,作為查詢、變更、訂閱或片段的一部分所請求的欄位。
選擇器
請參閱 正規化選擇器。
@skip
一個添加到欄位、內聯片段和片段散佈的指令,允許條件包含。它是@include
指令的相反指令。
快照
針對 store 中目前資料執行讀取器選擇器的結果。請參閱 lookup。
過時
待辦
Store
待辦
@stream
一個可以添加到 List
類型欄位的指令,該指令允許以遞增方式交付列表中的個別項目。客戶端可以在等待伺服器交付其餘項目的同時,渲染初始項目集。如需更多詳細資訊,請參閱 GraphQL 的 @stream 指令文件。
@stream_connection
一個類似於用於分頁的 @connection 指令的指令,只是修改為允許以遞增方式交付分頁佇列中的項目。它還有一個額外的參數 initial_count
,用於指定要在初始有效負載中交付多少個項目。如需了解有關如何使用此指令的更多資訊,請參閱串流分頁頁面。
訂閱
Relay store 公開的方法。接受回呼和快照 (請參閱 lookup)。當呼叫notify
時,如果該快照引用的資料已更新或失效,Relay store 將呼叫此回呼。
訂閱
GraphQL 訂閱是一種機制,允許客戶端訂閱來自伺服器的資料變更,並在該資料變更時收到通知。
GraphQL 訂閱看起來與查詢非常相似,只是它使用訂閱關鍵字
subscription FeedbackLikeSubscription($input: FeedbackLikeSubscribeData!) {
feedback_like_subscribe(data: $input) {
feedback {
id
like_count
}
}
}
交易 ID
呼叫 network.execute
的給定執行個體的唯一 ID。此 ID 在網路請求的整個期間內將保持一致。它可以由傳遞給 RelayModernEnvironment
的自訂記錄函數使用。
遍歷
有四個樹狀遍歷是理解 Relay 內部行為的核心。
- 使用正規化 AST
- 當 Relay 在回應正規化器中正規化從 GraphQL 伺服器接收的有效負載時;
- 當 Relay 在資料檢查器中讀取並判斷是否有足夠的資料來滿足操作時;以及
- 當 Relay 在參考標記中判斷在垃圾回收期間哪些資料不再可存取時。
- 使用讀取器 AST
- 當 Relay 在讀取器中讀取資料以進行渲染時。
類型
欄位的 GraphQL 類型是對結構描述上欄位的描述,以它擁有的子欄位或其表示方式(字串、數字等)來描述。
另請參閱介面、抽象類型和GraphQL 文件以取得更多資訊。
類型精煉
在僅已知可能實作該類型的位置中包含特定類型的片段。這允許我們僅當欄位定義在該特定物件上時才選擇它們,否則返回 null。
例如,node(id: 4) { ... on User { name } }
。在這種情況下,我們事先不知道 node(id: 4)
是否為 User。如果它是,則此片段將包含使用者名稱。
另請參閱抽象類型精煉。
更新器
傳遞給 commitMutation
的回呼,它為應用程式開發人員提供了對 store 中資料的命令式控制。
請參閱文件,也請參閱樂觀更新器。
值
記錄上的單一值,例如 has_viewer_liked
或 name
。
與連結記錄進行比較。
變數
GraphQL 變數是一種結構,允許在 GraphQL 查詢內引用動態值。它們必須在查詢啟動時提供,並且可以在整個巢狀片段中使用。
請參閱導覽的變數章節,並與@argumentDefinitions進行比較。
此頁面有用嗎?
協助我們讓網站變得更好 回答幾個簡單的問題.