2016-09-03 3 views
0

Прежде всего здесь мой фрагмент:реле setVariables функции терпят неудачу

initialVariables: { 
 
    limit: 3, 
 
    }, 
 
    fragments: { 
 
    app:() => Relay.QL` 
 
     fragment on App { 
 
     id 
 
     personnels(first: $limit) { 
 
      pageInfo { 
 
      hasNextPage 
 
      hasPreviousPage 
 
      } 
 
      edges { 
 
      cursor 
 
      node { 
 
       name 
 
      } 
 
      } 
 
     } 
 
     } 
 
    ` 
 
    } 
 
    }

начальное чтение с сервера работает нормально, но когда я звоню this.props.relay.setVariables, и пытаясь установить предельную переменную, я всегда получаю:

Запрос сервера на запрос App_AppRelayQL не удалось по следующим причинам:

  1. globalId не определен узел (идентификатор: $ ID_0) { ^^^

в консоли браузера. Я думаю, что это может иметь какое-то отношение к схеме. Но не уверен, что, так вот моя схема:

import { 
 
    GraphQLSchema, 
 
    GraphQLObjectType, 
 
    GraphQLString, 
 
    GraphQLInt, 
 
    GraphQLList, 
 
    GraphQLID, 
 
    GraphQLNonNull 
 
} from 'graphql'; 
 

 
import { 
 
    nodeDefinitions, 
 
    fromGlobalId, 
 
    globalIdField, 
 
    connectionDefinitions, 
 
    connectionFromArray, 
 
    connectionArgs, 
 
    mutationWithClientMutationId 
 
} from 'graphql-relay'; 
 

 
class App {}; 
 
class Personnel {}; 
 
let app = new App(); 
 
let Personnels = []; 
 

 
(() => { 
 
    let Jason = new Personnel(); 
 
    let John = new Personnel(); 
 

 
    Jason.name = 'Jason'; 
 
    Jason.id = 1; 
 
    John.name = 'John'; 
 
    John.id = 2; 
 

 
    personnels.push(YangGuoRong); 
 
    personnels.push(DengLiFang); 
 
})(); 
 

 

 
let {nodeInterface, nodeField} = nodeDefinitions(
 
    (gloablId) => { 
 
    const {type} = fromGlobalId(globalId); 
 

 
    switch(type) { 
 
     case 'App': 
 
     return app; 
 
     default: 
 
     return null; 
 
    } 
 
    }, 
 
    (obj) => { 
 
    if (obj instanceof App) { 
 
     return appType; 
 
    } else if (obj instanceof Personnel) { 
 
     return personnelType; 
 
    } else { 
 
     return null; 
 
    } 
 
    } 
 
); 
 

 

 
let getPersonnel = (id) => personnels[id]; 
 
let getPersonnels =() => personnels; 
 

 
let appType = new GraphQLObjectType({ 
 
    name: 'App', 
 
    fields:() => ({ 
 
    id: globalIdField('App'), 
 
    personnels: { 
 
     type: personnelConnection.connectionType, 
 
     args: connectionArgs, 
 
     resolve: (_, args) => connectionFromArray(personnels, args) 
 
    } 
 
    }), 
 
    interfaces: [nodeInterface] 
 
}); 
 

 
let personnelType = new GraphQLObjectType({ 
 
    name: 'Personnel', 
 
    fields:() => ({ 
 
    id: { 
 
     type: new GraphQLNonNull(GraphQLID), 
 
     resolve: (obj) => obj.id 
 
    }, 
 
    name: {type: GraphQLString}, 
 
    }), 
 
}); 
 

 

 
let personnelConnection = connectionDefinitions({ 
 
    name: 'Personnel', 
 
    nodeType: personnelType 
 
}); 
 

 
new GraphQLObjectType({ 
 
    name: 'Query', 
 
    fields: { 
 
     node: nodeField, 
 
     app: { 
 
     type: appType, 
 
     resolve:() => app 
 
     }, 
 
    } 
 
    }), 
 
}); 
 

 
export default schema;

ответ

1

Вы сделали Опечатка в определениях узлов (Вы писали gloablId вместо globalId во второй строке). Вот почему globalId не определен.

let {nodeInterface, nodeField} = nodeDefinitions(
    (gloablId) => { 
    const {type} = fromGlobalId(globalId); 

    switch(type) { 
     case 'App': 
     return app; 
     default: 
     return null; 
    } 
    }, 
    (obj) => { 
    if (obj instanceof App) { 
     return appType; 
    } else if (obj instanceof Personnel) { 
     return personnelType; 
    } else { 
     return null; 
    } 
    } 
); 

При появлении этих ошибок я всегда пытаюсь определить ошибку, выполнив поиск кода для переменной, указанной в ошибке. Это в основном помогает

+0

Ничего себе, спасибо большое. Не могу поверить, насколько я был небрежен. Большое спасибо. Я думаю, что у relay и graphql есть много жаргонов, которые вам нужно ввести точно, было бы здорово, если бы они могли сделать эти API более гибкими. – Nexus2020

+0

Добро пожаловать. У меня также было много ситуаций, когда ошибки в некоторых реле или материалах graphql вызывали ошибки. Поэтому я думаю, что ты прав. Но в этом случае globalId является просто именем переменной. Вы могли бы также назвать его gloablId;) – jkettmann

+0

Держу пари, если можно реализовать своего рода intellisense, который сортирует все эти жаргоны, многие люди будут его использовать. – Nexus2020

Смежные вопросы