Relay
是 Relay library 的 entry point。如果你使用任何一個 prebuilt package,你可以用全域變數取用它;如果你使用 CommonJS 模組,那你可以 require()
它。
附註
react-relay
npm module 把react
設為 peer dependency。你的應用程式應該明確地指定 React 為 dependency。
最常使用的 function 是 createContainer()
,它用資料宣告來包裝 component。
屬性
方法
查看 Mutations Guide。
查看 Routes Guide。
var Container = Relay.createContainer(Component, { initialVariables?: Object, prepareVariables?: (variables: Object, route: string) => Object, fragments: {[key: string]: Function} });
建立一個新的 Relay Container - 查看 Container Guide 以獲得更多的細節與範例。
Relay.injectNetworkLayer(networkLayer: { sendMutation: (mutation: RelayMutationRequest) => void; sendQueries: (queries: Array<RelayQueryRequest>) => void; supports: (...options: Array<string>): boolean; });
覆蓋掉 DefaultNetworkLayer。
舉個例子,我們可以如下印出每一個被送去伺服器的 mutation:
var DefaultNetworkLayer = Relay.DefaultNetworkLayer; class MutationLoggingNetworkLayer extends DefaultNetworkLayer { sendMutation(mutation) { // 印出回應或是錯誤 (注意,`mutation` 是一個 promise) mutation.then( response => console.log(response), error => console.error(error), ); // 使用預設的 network 實作來發送 mutation return super.sendMutation(mutation); } }; Relay.injectNetworkLayer(new MutationLoggingNetworkLayer());
Relay.injectTaskScheduler(scheduler: Scheduler): void; type Scheduler = (task: Function) => void;
Relay 把它的核心處理 function 包在輕量的 task 裡面,它預設是會立刻被執行 (也就是說,同步地)。為了客製化這些 task 何時被執行 - 例如為了避免在 touch 手勢期間中斷動畫 - 應用程式可以提供一個客製化的排程 function。
預設的實作如下:
Relay.injectTaskScheduler(task => task());
注意它會立刻執行下一個 task。Relay 會管理 task 的順序以確保操作有一個適當的順序 - scheduler 不能跳過或重新排序 task,只能決定何時執行下一個。
在 React Native 中,我們可以如下把 Relay 的處理程序排程,以避免中斷 touch 手勢:
var {InteractionManager} = require('react-native'); Relay.injectTaskScheduler(InteractionManager.runAfterInteractions);
你可以在 React Native API 文件 閱讀更多有關 InteractionManager
的內容。
Relay.isContainer(Component: Object): boolean;
var Component = require('...'); if (Relay.isContainer(Component)) { Component.getFragment('...'); }