中继/路由器登录突变?
Posted
技术标签:
【中文标题】中继/路由器登录突变?【英文标题】:Relay/router login mutation? 【发布时间】:2016-09-08 16:55:16 【问题描述】:我正在尝试实现登录突变。突变验证提供的 id_token 并通过会话登录用户。突变本身有效(通过 GraphiQL 验证),但我在将其与 Relay 集成时遇到了问题。
当用户登录时,整个 Relay 存储可能会被更改,因为“查看器”是根查询。但我不想在胖查询中列出我的整个查询树。能够以某种方式清除整个商店会很不错,但我看不到使用 react-router-relay
的方法。
中继突变:
export default class LoginMutation extends Relay.Mutation
getMutation()
return Relay.QL`mutation login`;
getVariables()
return
id_token: this.props.id_token
;
getFatQuery()
// TODO: list everything?
return Relay.QL`
fragment on LoginPayload
viewer
`;
getConfigs()
return []; // TODO: not sure what to return...
用法:
Relay.Store.commitUpdate(new LoginMutation(id_token),
onSuccess: (resp) =>
history.push('/');
);
GraphQL 架构:
input LoginInput
id_token: String!
clientMutationId: String!
type LoginPayload
viewer: Viewer
clientMutationId: String!
type Mutation
login(input: LoginInput!): LoginPayload
interface Node
id: ID!
type Query
viewer: Viewer
node(id: ID!): Node
type Viewer implements Node
id: ID!
user: User
ships: [Ship]
ship(id: ID!): Ship
schema
query: Query
mutation: Mutation
【问题讨论】:
Release v0.8.0 的Release 引入了Relay.Environment
,您可以将其实例化并传递给Relay.Renderer
。它还没有记录。查看 github 问题的最后几个 cmets:Implement RelayStore.reset()。
【参考方案1】:
在fatQuery
中,当您列出non-scalar
字段时,Relay 将假定任何 连接的字段可能已更新。在某些需要参数的字段(例如,(first: n)
)中,您可以使用@relay(pattern: true)
绕过此要求。 This SO question 讨论该功能。
【讨论】:
以上是关于中继/路由器登录突变?的主要内容,如果未能解决你的问题,请参考以下文章