Relay.Store.commitUpdate 从不提交
Posted
技术标签:
【中文标题】Relay.Store.commitUpdate 从不提交【英文标题】:Relay.Store.commitUpdate never commits 【发布时间】:2017-04-08 05:27:40 【问题描述】:我最近开始在我的 React Native 应用上使用 Relay,但突变似乎从未提交(我没有从成功/失败回调中获得任何日志记录),我也没有在我的 GraphQL 实现的 resolve
函数中的 console.log
中得到任何东西。
我的应用程序的根组件中有以下代码。 我实际上不需要在我的应用程序中显示更新后的名称,它只是用于更新数据库。
class App extends Component
componentDidMount()
Relay.Store.commitUpdate(new DogMutation(name: 'Stack',
onSuccess: () => console.log("success"),
onFailure: (transaction) => console.error(transaction)
))
突变类如下所示:
export default class DogMutation extends Mutation
getFatQuery()
return Relay.QL`
fragment on Dog
name
`
getMutation()
return Relay.QL`mutation renameDog`
getVariables()
return
name: this.props.name
getConfigs()
return []
GraphQL 侧变异代码如下所示:
export const renameDog =
type: Dog,
description: `Rename a dog.`,
args:
input:
type: new GraphQLInputObjectType(
name: `DogInput`,
fields:
name:
type: GraphQLString,
)
,
async resolve (obj, args)
console.log(args) <- Which never outputs
当我拨打Relay.Store.commitUpdate()
时,我得到:
RelayMutationQueue.js:390 Optimistic query for `renameDog`
RelayMutationQueue.js:454 Mutation query for `renameDog`
在我的 React Native Chrome 调试器中。
我的代码有什么问题吗?我读过的多篇文章会遗漏一些东西吗?
我的直觉是我直接使用Relay.Store
,而不是在某处创建一个并将其作为props
传递,但要知道这是它的一个全局实例。
【问题讨论】:
【参考方案1】:所以我使用了graphql-relay 的mutationWithClientMutationId
函数,它似乎确实提交了消息,但仍然没有从突变中回调。
【讨论】:
您好,Chrome 调试器的“网络”选项卡输出什么?是否已发送请求? 另外,您可以尝试将您的应用程序包装在 Container 和 RootContainer 中并调用this.props.relay
吗?
@whitep4nther 我尝试做this.props.relay.commitUpdate(name:'foo')
,它正在访问 GraphQL,但没有回调或任何东西。
听起来很奇怪。您可以尝试使用您的 mutation 和 GraphiQL 直接更新您的服务器吗?所以我们可以确定服务器部分工作正常。
@whitep4nther 谢谢。我会在一小时内发布一个要点【参考方案2】:
所以问题是一个简单的问题,我花了很长时间才找到,直到 josephsavona 帮助我解决了这个 issue。
回调从未被调用,因为它们不属于突变的初始化,而是commitUpdate
函数的第二个参数。
【讨论】:
以上是关于Relay.Store.commitUpdate 从不提交的主要内容,如果未能解决你的问题,请参考以下文章