【发布时间】:2019-02-02 07:23:14
【问题描述】:
我正在使用自定义提供程序实施 OAuth。
所以我有Auth 组件在'componentDidMount:
client.mutate({
mutation: CURRENT_USER_MUTATION,
variables: {
token: (response.data.token.value) || null,
},
});
我的变异看起来像:
gql`
mutation($token: String!) {
CurrentUser(token: $token) @client
}
`;
我有解析器:
defaults: {
current_user: null,
},
resolvers: {
Mutation: {
CurrentUser: (_: any, { token }: { token: string }, { cache }: { cache: Object }): null => {
const { user } = decodeJWT(token);
cache.writeQuery({
query: CURRENT_USER,
data: {
current_user: {
__typename: 'user',
id: user.id,
name: user.name,
level: user.level,
email: user.email,
},
},
});
return cache.readQuery({ query: CURRENT_USER });
},
},
然后发生了一些事情,当我查看 chrome apollo 调试器时,我可以清楚地看到:
所以数据已经在 Apollo 缓存中,但 ROOT_QUERY 仍然有 null 作为当前用户。
当我尝试像这样使用react-apollo Mutation 组件时:
<Mutation mutation={CURRENT_USER_MUTATION}>
{(mutate: Function,): React.Node => {
return (
<button type="button" onClick={(): Function => mutate(({ variables: { token: '123' } }: Object))}>
Do it
</button>
);
}}
</Mutation>
然后完美运行。
所以看起来在使用cache.writeQuery 后,其他组件/缓存没有通知正在运行的突变。
感谢您的帮助 :)
【问题讨论】:
标签: reactjs graph oauth-2.0 react-apollo apollo-client