Значения не определены в преобразователе (Graphql, Apollo, React)

#reactjs #graphql #apollo #react-apollo

#reactjs #graphql #apollo #реагировать-apollo

Вопрос:

Распознаватель отлично работает, когда я использую его с игровой площадки. Но когда я отправляю значения от клиента в распознаватель, значения каким-то образом отображаются «неопределенными» в распознавателе.

Клиент:

 import React, { useState } from 'react';
import { useQuery, useMutation } from '@apollo/react-hooks';
import { Form, Grid } from 'semantic-ui-react';
import gql from 'graphql-tag';

function TestPage() {
    const userId = "5fa2c177382ce83660b3911b";

    const { loading, data: { getUser } = {} } = useQuery( FETCH_USER_QUERY, {
        variables: {
          userId
        }
    });

    const [values, setValues] = useState({
        countryInput: '',
        descriptionInput: ''
    })

    const onChange = (event) => {
        setValues({ ...values, [event.target.name]: event.target.value});
    }

    const [updateCountry] = useMutation(UPDATE_COUNTRY_MUTATION, {
        variables: {
        userId, 
        values 
        }
    })
    
    const submit = (event) => {
        event.preventDefault();
        updateCountry()
    }

    console.log(values)

      let TestPage;
      if(loading){
        TestPage = (<p>Page Loading...</p>)
      } else {
        const {
            username,
            country,
            description
        } = getUser;

        TestPage = (
            <Grid columns={1}>
            <Grid.Row className="profile-name">
                <h1>Test Page</h1>
                <h4>This page is for testing code</h4>
                <h4>User: {username}</h4>
            </Grid.Row>
            <Grid.Row className="profile-name">
                <h1>Country: {country}</h1>
                <h1>Desc: {description}</h1>
            </Grid.Row>
            <Grid.Row>
                <Form>
                    <input
                    style={{ marginBottom: 10 }}
                    placeholder="Country"
                    type="text"
                    name="countryInput"
                    value={values.countryInput}
                    onChange={onChange}
                    />

                    <input
                    style={{ marginBottom: 10 }}
                    placeholder="Description"
                    type="text"
                    name="descriptionInput"
                    value={values.descriptionInput}
                    onChange={onChange}
                    />

                    <button 
                    onClick={submit}
                    className="ui button red"
                    color="red"
                    >
                        Save
                    </button>
                </Form>

            </Grid.Row>
        </Grid>
        )
      }

    return TestPage;
}
 

Мутация (в том же файле, что и клиент):

 const UPDATE_COUNTRY_MUTATION = gql `
    mutation UpdateCountry( 
        $userId: ID!, 
        $countryInput: String, 
        $descriptionInput: String ){
        updateCountry(
            userId: $userId, 
            countryInput: $countryInput
            descriptionInput: $descriptionInput
        ){
            username
            country
            description
        }
    }
`;
 

Раньше я получал «Необработанное отклонение (ошибка): ошибка сети: ответ не удался: получен код состояния 400», но теперь он просто возвращает нули в БД.

Я предполагаю, что проблема заключалась в мутации, я изменил ее с использования «ввода» на просто ввод переменных, но не работает.

Я поискал в Google и попробовал разные способы выполнения обратных вызовов и перехватов, но я получаю необработанную ошибку отклонения, и когда она работает, значения отображаются неопределенными.

Как значение может быть определено при отправке в клиенте, но отображаться неопределенным в распознавателе? Что я делаю не так?

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

1. этого достаточно для детального тестирования сетевого запроса… передана переменная «значения», а не обязательные

2. Я использовал {error} при изменении useMutation и получил сообщение об ошибке: «Ошибка: объекты недопустимы как дочерние элементы React (найдено: Ошибка: ошибка сети: ответ не удался: получен код состояния 400). Если вы хотели отобразить коллекцию дочерних элементов, вместо этого используйте массив.», так что, я полагаю, значения передаются как объекты? Я внес значения, требуемые при мутации. По-прежнему выдается ошибка.

3. разные вещи… react утверждает о рендеринге сложного объекта… опять же, проверьте НЕОБРАБОТАННЫЙ (json) сетевой запрос (тело, на вкладке инструменты разработчика / сеть) — показать его

4. { «OperationName»: «UpdateCountry», «query»: «обновление мутации в стране ($userId: ID!, $countryInput: String!, $descriptionInput: String!) {n updateCountry(n userId: $userId n Ввод страны: $countryInput n Ввод описания: $descriptionInput n ) {n имя пользователя n страна n описание n __имя типа n } n} n», «переменные»: { «Идентификатор пользователя»:»5fa2c177382ce83660b3911b», «values»: { «countryInput»: «sdfkjhsdk», «descriptionInput»: «sdlfjdsd» } } }

5. вы видите «дополнительный» values «уровень» в variables ?

Ответ №1:

«… значения» вместо «значений» в useMutation:

 const [updateCountry] = useMutation(UPDATE_COUNTRY_MUTATION, {
    variables: {
       userId, 
       ...values 
       }
    })