Я работаю с нативным приложением, используя GraphQL.В этом приложении существует список помеченных пользователем репозиториев и кнопка для просмотра пользователем пометить репозиторий, но проблема в том, что когда пользователь нажимает кнопку «звездочка», пользовательский интерфейс, по-видимому, не перезапускает запрос userInfo.
функции:
userInfo = async (query, repoNumber) => {
const result = await this.props.client.query({
query: USER_INFO_QUERY,
variables: { query, repoNumber },
});
const user = result.data.user;
this.setState({ user });
}
addStar = (repoId) => {
this.props.client.mutate({
mutation: ADD_STAR_MUTATION,
variables: { repoId },
refetchQueries: [{
query: USER_INFO_QUERY,
variables: { query: this.state.user.login, repoNumber: 10 },
}]
});
}
removeStar = (repoId) => {
this.props.client.mutate({
mutation: REMOVE_STAR_MUTATION,
variables: { repoId },
refetchQueries: [{
query: USER_INFO_QUERY,
variables: { query: this.state.user.login, repoNumber: 10 },
}]
});
}
Запрос:
export const USER_INFO_QUERY = gql`
query UserInfoQuery($query: String!, $repoNumber: Int!) {
user (login: $query) {
id
login
avatarUrl
email
url
name
starredRepositories(first: $repoNumber) {
totalCount
nodes {
name
description
viewerHasStarred
id
}
}
}
}`;
Мутации:
export const ADD_STAR_MUTATION = gql`
mutation AddStar($repoId: ID!) {
addStar (input: { starrableId: $repoId }) {
clientMutationId
starrable {
viewerHasStarred
}
}
}
`;
export const REMOVE_STAR_MUTATION = gql`
mutation RemoveStar($repoId: ID!) {
removeStar (input: { starrableId: $repoId }) {
clientMutationId
starrable {
viewerHasStarred
}
}
}
`;