欄位參數
執行階段參數
如果你的解析器需要在執行階段存取參數資料,你可以在解析器的文件區塊的欄位定義中簡單地定義參數,然後將該參數讀取為解析器函數的第二個參數的屬性。
/**
* @RelayResolver User.greet(salutation: String!): String
*/
export function greet(user: UserModel, args: { salutation: string }): string {
return `${args.salutation}, ${user.name}!`;
}
使用此欄位將需要在你的 GraphQL 查詢中將參數傳遞給該欄位
query MyQuery($salutation: String!) {
me {
greet(salutation: $salutation)
}
}
反過來說,這會在您擷取查詢時需要傳遞參數。
將參數傳遞給你的 @rootFragment
如果你正在定義一個衍生解析器,而且其根片段中的其中一個欄位需要參數,你必須在你的片段定義中使用 @argumentDefinitions 定義一個明確的片段參數。你的解析器欄位隨後會預期將此參數作為欄位參數傳遞。
/**
* @RelayResolver User.fancyGreeting: String
* @rootFragment UserFancyGreetingFragment
*/
export function fancyGreeting(key: UserFancyGreetingFragment$key): string {
const user = readFragment(graphql`
fragment UserFancyGreetingFragment on User @argumentDefinitions(
salutation: {type: "String"},
) {
name
greet(salutation: $salutation)
}
`, key);
return `${user.name} says ${user.greet}`;
}
使用此欄位將需要在你的 GraphQL 查詢中將參數傳遞給該欄位
query MyQuery($salutation: String!) {
me {
fancyGreeting(salutation: $salutation)
}
}