Failed prop type: prop `children` помечен как обязательный в` Mutation`, но его значение равно `undefined` - PullRequest
0 голосов
/ 20 декабря 2018

Я пытаюсь записать некоторую информацию с помощью Apollo в базу данных GraphQL / MongoDB, но всегда возникает ошибка при мутации.

Может быть, кто-то может мне помочь: (?

Iвызовите функцию с необходимыми параметрами с помощью this.addTracker (); в onComponentDidMount ();

    addTracker(trackerModelID, Hash, userId){
    console.log("Typ: " + trackerModelID);
    console.log("Access-Tooken: " + Hash.access_token)

    var access_token = Hash.access_token
    var token_type = Hash.token_type
    var expires_in = Hash.expires_in
    var user_id = Hash.user_id

    const createTrackerMutation = gql`
        mutation CreateTrackerMutation($trackerModelID: ID, $userId: ID, 
       $access_token: String, $token_type: String, $expires_in: Int, $user_id: String)
        {  createTracker (
            trackerModelID: $trackerModelID,
            userId: $userId,
            access_token: $access_token,
            token_type: $token_type,
            expires_in: $expires_in,
            user_id: $user_id
            )
            {
            id
            }
        }
        `
         console.log("jetzt run")   
        return(
          <div>hi
        <Mutation 
            mutation={createTrackerMutation} 
            variables={{ trackerModelID, userId, access_token, token_type, expires_in, user_id }}>
        </Mutation>
        </div>  
        )
    }

Сообщение об ошибке: Предупреждение: сбойный тип проп: пропел children помечен как обязательный в Mutation, но его значение undefined. в мутации (в fitbit.js: 97)

Ответы [ 2 ]

0 голосов
/ 20 декабря 2018

Как показывает ошибка, компонент Mutation ожидает пропуска children, но вы его не предоставляете.И компоненты Query, и Mutation используют шаблон рендеринга реквизитов , что означает, что предоставленный вами children должен фактически быть функцией, возвращающей компонент для рендеринга.

<Mutation 
  mutation={createTrackerMutation} 
  variables={{ trackerModelID, userId, access_token, token_type, expires_in, user_id }}>
  {(mutate, result) => {
    return (
      <div>Your component here.</div>
    )
  }}
</Mutation>

Подробно о сигнатуре функции рендеринга реквизита можно найти здесь , но в целом ей передается функция mutate в качестве первого параметра, а затем, для удобства, объект results в качестве второгопараметр.Функция mutate - это то, что вы вызываете для запуска мутации.

В отличие от компонента Query, который будет запускать любой запрос, которому вы передаете его при монтировании, компонент Mutation не будет запускать связанный GraphQL.запрос до mutate вызывается.Это сделано намеренно, так как большинство мутаций обычно не требуется, пока не произойдет какое-либо действие пользователя.

Если вам нужно запустить мутацию, когда компонент смонтирован, компонент, которыйрендеринг внутри Mutation компонента должен быть передан в mutate как реквизит.Затем этот компонент может вызывать mutate в своем методе componentDidMount.Этот вопрос был задан ранее, и более подробный ответ можно найти здесь .

0 голосов
/ 20 декабря 2018

Ошибка происходит из вашего определения propTypes внутри Mutation.

Ошибка говорит о том, что Mutation требует детей в качестве реквизита, но children не передано Mutation

вам нужно вставить туда детей:

  <Mutation 
        mutation={createTrackerMutation} 
        variables={{ trackerModelID, userId, access_token, token_type, expires_in, user_id }}>
     [INSERT_CHILDREN_HERE]
    </Mutation>

Дети могут быть элементами JSX, текстом или чем-то еще, в зависимости от того, что ожидает Mutation.Согласно документу, Mutation использует renderProp pattern.Таким образом, вы должны передать ему функцию, которая возвращает JSX. Вот хороший пример в документе

...