Как использовать подписку GraphQL в реагировать на родной? - PullRequest
0 голосов
/ 13 апреля 2020

Я пытаюсь заставить подписки GraphQL работать в моем приложении чата, которое я создаю в реагирующем языке. Мои мутации createMessage и listMessages уже работают нормально.

Компонент списка сообщений:

// Other imports
import * as queries from '../../../src/graphql/queries'
import * as subscriptions from '../../../src/graphql/subscriptions'

export class MessageList extends React.Component {
constructor(props) {
  super(props);
  this.state = {
    messages: []
  };
}

async componentDidMount() {

  const messagesFromServer = await API.graphql(graphqlOperation(queries.listMessages));
  this.setState({ messages: messagesFromServer.data.listMessages.items });

  const subscription = API.graphql(
    graphqlOperation(subscriptions.onCreateMessage)
  ).subscribe({
    next: (data) => console.log(data)
  });

  // Rendering Down here  
} 

В другом компоненте я отправляю сообщение на сервер aws с мутацией createMessage. Это работает успешно, так как я могу перечислить сообщения с сервера.

await API.graphql(graphqlOperation(mutations.createMessage, params));

мутаций. js:

export const createMessage = `
  mutation CreateMessage($input: CreateMessageInput!) {
    createMessage(input: $input) {
    ID
    content
    author
    createdAt
  }
}
`;

подписок. js:

export const onCreateMessage = `
  subscription OnCreateMessage(
    $ID: String
    $content: String
    $author: String
    $createdAt: String
  ) {
    onCreateMessage(
    ID: $ID
    content: $content
    author: $author
    createdAt: $createdAt
  ) {
    ID
    content
    author
    createdAt
  }
}
`;

Схема, которую я использовал для создания из aws api в консоли:

input CreateMessageInput {
  ID: String!
  content: String!
  author: String!
  createdAt: String!
}

type Message {
  ID: String!
  content: String!
  author: String!
  createdAt: String!
}

type Mutation {
  createMessage(input: CreateMessageInput!): Message
}

type Query {
  listMessages(filter: TableMessageFilterInput, limit: Int, nextToken: String): 
}

type Subscription {
  onCreateMessage(
  ID: String,
  content: String,
  author: String,
  createdAt: String
  ): Message
     @aws_subscribe(mutations: ["createMessage"])
}

Кажется, я не вижу данных (сообщений), возвращающихся в мой журнал, когда я использую мутацию createMessage, даже если мне кажется, что я подписан? (Мой console.log (data) никогда не попадает) Есть мысли?

...