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 从不提交的主要内容,如果未能解决你的问题,请参考以下文章