Как настроить GraphQL или ApolloClient для выполнения запросов с интроспективными фрагментами?

#javascript #reactjs #graphql #apollo-client

#язык JavaScript #реагирует на #graphql #аполлон-клиент

Вопрос:

Я пытаюсь выполнить запрос GraphQL следующим образом:

 fragments.js -----------------------------------------------------  import { gql } from '@apollo/client';  export const CORPORATE_MANAGER_ROLE = gql`  fragment CorporateManagerRole on UserRole {  id  name  corporationId  corporationName } `;  
 listUser.js --------------------------------------------------------  import { gql } from '@apollo/client'; import { CORPORATE_MANAGER_ROLE } from './fragments';  const ListUserQuery = gql`  ${CORPORATE_MANAGER_ROLE} query ListUser($input: GetUserListInputData!) {  listUser(inputData: $input) {  items {  firstName  lastName  email  status  comments  birthDay  gender  id  initials  roles {  ... on CorporateManagerRole {  id  name  corporationId  corporationName  }  }  }  }  } `;  export default ListUserQuery;  

Но я не получаю ответа с данными в useEffect внутри компонента React. У меня есть «аполлон-клиент»: «2.6.4»

 usersList.jsx --------------------------------------------------------------  import React, { useEffect, useState } from 'react'; import {  Table, TableCell, TableContainer, TableHead, TableRow, withStyles, withTheme, } from '@material-ui/core'; import { compose } from 'recompose'; import { withSnackbar } from 'notistack'; import PropTypes from 'prop-types'; import Paper from '@mui/material/Paper'; import InputBase from '@mui/material/InputBase'; import IconButton from '@mui/material/IconButton'; import SearchIcon from '@mui/icons-material/Search'; import AddIcon from '@material-ui/icons/Add'; import { NavLink } from 'react-router-dom'; import styles from './styles'; import MaterialNavButton from '../../components/MaterialButton/materialNavButton'; import useQueryCustomApolloClient from '../../hooks/useQueryCustomApolloClient'; import ListUserQuery from '../../graphQL/User/ListUser';   const UsersList = ({  classes,  theme,  enqueueSnackbar, }) =gt; {  const [usersList, setUsersList] = useState([]);  console.log(usersList);   const {  loading: usersLoading,  error: usersError,  data: usersData,  } = useQueryCustomApolloClient(  ListUserQuery, {  variables: {  input: {  corporationId: 1,  },  },  },  );    useEffect(() =gt; {  if (usersError !== undefined) {  enqueueSnackbar(usersError.message, {  variant: 'error',  });  }  if (!usersData) return;  debugger; lt;----- application don't stop here even after succesfull response data which I see in Chrome devtools network logs   setUsersList(usersData.listUser.items);  }, [usersData]);  ...  return (lt;divgt;  usersList.map(item =gt; ...) lt;/divgt;)  

P.S. Добавлен код компонента, в котором я пытаюсь получить список пользователей с помощью запроса GraphQL. Итак, обычно, когда я не использую такой запрос «… на CorporateManagerRole { … }», я улавливаю ответ в крючке useEffect, но в данном случае я не получаю его в useEffect.

Я

Комментарии:

1. Что вы подразумеваете под » интроспективными фрагментами «? Я не вижу самоанализа в коде, который вы показали.

2. » Я не получаю ответа с данными » — что происходит вместо этого? Вы получаете сообщение об ошибке, данные пусты? Проблема только в ролях? Как вы пользуетесь useEffect ? Пожалуйста, покажите свой код. Почему вы используете useEffect вместо useQuery in react? Просьбы также показывают , как вы создаете ApolloClient , т. е. Как вы настраиваете свои ссылки.

3. @Bergi Пожалуйста, взгляните еще раз, я добавил кое-какую информацию в свой пост.

4. Вы уверены, что нигде не получаете ошибки?

5. @Bergi Вы правы, теперь я вижу ошибку: сообщение: «Ошибка проверки типа FieldUndefined: Поле» Имя корпорации «в типе» Роль пользователя «не определено @» Роль корпорации/имя корпорации «»сообщение:» Ошибка проверки типа UnusedFragment: Неиспользуемый фрагмент Роли корпорации»