5

Chatを使用して、2 つのクエリと 1 つのミューテーションでコンポーネントをラップしようとしていますcompose

ただし、コンソールに次のエラーがまだ表示されます。

Uncaught Error: react-apollo HOC ごとのクエリ、サブスクリプション、またはミューテーションのみをサポートします。[object Object]クエリは 2 つ、サブスクリプションは 0、ミューテーションは 0 でした。' ' を使用composeして、複数の操作タイプをコンポーネントに結合できます

これが私のクエリとエクスポートステートメントです:

// this query seems to cause the issue
const findConversations = gql`
    query allConversations($customerId: ID!) {
        allConversations(filter: {
          customerId: $customerId
        })
    } {
        id
    }
`

const createMessage = gql`
    mutation createMessage($text: String!, $conversationId: ID!) {
        createMessage(text: $text, conversationId: $conversationId) {
            id
            text
        }
    }
`

const allMessages = gql`
    query allMessages($conversationId: ID!) {
        allMessages(filter: {
        conversation: {
        id: $conversationId
        }
        })
        {
            text
            createdAt
        }
    }
`

export default compose(
  graphql(findConversations, {name: 'findConversationsQuery'}),
  graphql(allMessages, {name: 'allMessagesQuery'}),
  graphql(createMessage, {name : 'createMessageMutation'})
)(Chat)

どうやら、問題はfindConversationsクエリにあります。コメントアウトすると、エラーが発生せず、コンポーネントが適切に読み込まれます。

// this works
export default compose(
  // graphql(findConversations, {name: 'findConversationsQuery'}),
  graphql(allMessages, {name: 'allMessagesQuery'}),
  graphql(createMessage, {name : 'createMessageMutation'})
)(Chat)

何が欠けているのか誰か教えてもらえますか?

ちなみに、allMessagesQuery関連する場合に備えて、 にもサブスクリプションを設定しています。

componentDidMount() {

  this.newMessageSubscription = this.props.allMessagesQuery.subscribeToMore({
    document: gql`
        subscription {
            createMessage(filter: {
            conversation: {
            id: "${this.props.conversationId}"
            }
            }) {
                text
                createdAt
            }
        }
    `,
    updateQuery: (previousState, {subscriptionData}) => {
       ...
    },
    onError: (err) => console.error(err),
  })

}
4

1 に答える 1

10

あなたfindConversationsQueryは実際には2つのクエリです。これです:

query allConversations($customerId: ID!) {
    allConversations(filter: {
      customerId: $customerId
    })
} 

そしてこれ:

{
    id
}

クエリ全体を 1 組の開き括弧と閉じ括弧で囲む必要があります。

あなたが書きたかったのは次のことだと思います:

query allConversations($customerId: ID!) {
    allConversations(filter: { customerId: $customerId }){
        id
    }
} 
于 2017-02-25T19:01:46.470 に答える