Relay 使用 routes 來定義 Relay 應用程式的 entry point。
附註
Relay routes 沒有真的實作任何 URL routing 的特定邏輯,也沒有使用 History API。未來我們可能會把 RelayRoute 重新命名成像是 RelayQueryRoots 或是 RelayQueryConfig 之類的東西。
屬性
方法
static paramDefinitions: {[param: string]: {required: boolean}}
Routes 可以宣告一組需要提供給 constructor 的參數名稱。這裡也是一個方便紀錄這組有效參數的位置。
class ProfileRoute extends Relay.Route { static paramDefinitions = { userID: {required: true}, }; // ... }
static prepareParams: ?(prevParams: {[prevParam: string]: mixed}) => {[param: string]: mixed};
Routes 可以使用 prepareParams
來提供預設參數,或者把傳進去的參數傳過去、轉換或隱藏。
class ProfileRoute extends Relay.Route { static queries = { viewer: () => Relay.QL`query { viewer }` }; static prepareParams = (prevParams) => { return { // 把提供的基本參數組傳過去: ...prevParams, // 轉換一個參數來符合內部的需求: id: toGlobalId('Profile', prevParams.id), // 提供一個起始的 `limit` 變數: limit: 10, } } // ... }
static queries: { [queryName: string]: () => Relay.QL`query { ... }` };
Routes 必須使用 Relay.QL
宣告一組 query root。這些 queries 會自動合成一個符合 Relay container 的 fragment 命名成 queryName
,與這個 route 一起使用在 Relay.RootContainer 上。
class ProfileRoute extends Relay.Route { static queries = { user: () => Relay.QL`query { user(id: $userID) }`, }; // ... }
In this example the Route should be initialized with a userID
which gets passed on to the query. That userID
variable will automatically be passed down to the top-level container and can be used there if needed. Further the top-level RelayContainer is expected to have a user
fragment with the fields to be queried.
static routeName: string
Routes 必須定義一個字串名稱。
使用 new
關鍵字來建立一個 route 實體,可選擇性地傳遞一些參數給它。
var profileRoute = new ProfileRoute({userID: '123'});