Я пытаюсь заставить подписки 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) никогда не попадает) Есть мысли?