#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: Неиспользуемый фрагмент Роли корпорации»