2017-05-28 2 views
3

Es fällt mir sehr schwer herauszufinden, warum mein PageType auf "page/pages" "PageType ist nicht definiert" gibt, gibt es einen anderen Weg, auf den ich verweisen soll ? Ich habe das Gefühl, das ein einfaches übersehen sein kann, wie andere Typen referenzierenVerschachteln von Typen im GraphQL-Schema

const PageType = new GraphQLObjectType({ 
    name: 'Page', 
    fields: { 
    _id: { type: new GraphQLNonNull(GraphQLID) }, 
    title: { type: GraphQLString }, 
    subtitle: { type: GraphQLString }, 
    description: { type: GraphQLString }, 
    page: { 
     type: PageType 
    } 
    pages: { 
     type: new GraphQLList(PageType), 
    } 
    }, 
}); 

Fehler (vor allem anderen zu helfen, ein ähnliches Problem suchen):

ReferenceError: PageType is not defined 
    at Object.<anonymous> (H:\Coding\Projects\react-starter-kit\build\webpack:\src\data\types\PageType.js:50:1) 
    at __webpack_require__ (H:\Coding\Projects\react-starter-kit\build\webpack:\webpack\bootstrap 8ce5b4572987765a465d:19:1) 
    at Object.<anonymous> (H:\Coding\Projects\react-starter-kit\build\server.js:731:74) 
    at __webpack_require__ (H:\Coding\Projects\react-starter-kit\build\webpack:\webpack\bootstrap 8ce5b4572987765a465d:19:1) 
    at Object.<anonymous> (H:\Coding\Projects\react-starter-kit\build\webpack:\src\data\schema.js:1:1) 
    at __webpack_require__ (H:\Coding\Projects\react-starter-kit\build\webpack:\webpack\bootstrap 8ce5b4572987765a465d:19:1) 
    at Object.<anonymous> (H:\Coding\Projects\react-starter-kit\build\server.js:1098:72) 
    at __webpack_require__ (H:\Coding\Projects\react-starter-kit\build\webpack:\webpack\bootstrap 8ce5b4572987765a465d:19:1) 
    at Object.<anonymous> (H:\Coding\Projects\react-starter-kit\build\server.js:7455:18) 
    at __webpack_require__ (H:\Coding\Projects\react-starter-kit\build\webpack:\webpack\bootstrap 8ce5b4572987765a465d:19:1) 
    at H:\Coding\Projects\react-starter-kit\build\webpack:\webpack\bootstrap 8ce5b4572987765a465d:65:1 
    at Object.<anonymous> (H:\Coding\Projects\react-starter-kit\build\server.js:71:10) 
    at Module._compile (module.js:570:32) 
    at Object.Module._extensions..js (module.js:579:10) 
    at Module.load (module.js:487:32) 
    at tryModuleLoad (module.js:446:12) 

Antwort

1

Der Fehler ist ziemlich geradlinig .. Sie versuchen, auf PageType zu verweisen, bevor diese Zuweisung vorgenommen wird. Gleicher Fehler würde mit einem minimalen Beispiel auftreten:

const foo = { 
    innerFoo: foo // error: foo is not defined 
} 

Aus diesem Grunde Funktionen, die oft als Thunks in diesen rekursiven Situationen

const foo = { 
    innerFoo:() => foo 
} 

Mit der Zeit verwendet werden, foo.innerFoo() aufgerufen wird, werden foo schon sein definiert und das wird funktionieren. GraphQL Schemas unterstützen das Erstellen von Feldern als Funktionen genau aus diesem Grund.

const FooType = new GraphQLObjectType({ 
    name: 'Foo', 
    fields:() => ({ // fields is a "thunk" 
    foo: { 
     type: FooType 
    }, 
    foos: { 
     type: new GraphQLList(FooType), 
    } 
    }), 
}) 
+1

Ernsthaft vielen Dank, das hat perfekt funktioniert. Die detaillierte Antwort erhöht mein Verständnis der Sprache erheblich – Davey

Verwandte Themen