2017-05-28 16 views
3

我有一个非常困难的时刻,试图找出为什么我的页面类型“page /页”给“PageType没有定义”,是否有一种不同的方式,我想引用它?我有一种感觉,这可能是一个简单的俯瞰着如何引用其他类型的无法嵌套在GraphQL架构中的类型

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), 
    } 
    }, 
}); 

错误(主要是为了帮助别人寻找类似的问题):

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) 

回答

1

的错误是非常直截了当..您正在尝试在分配之前引用PageType。将与一个小例子,发生同样的错误:

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

这就是为什么功能,通常被称为的thunk在这些递归情况

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

的时候foo.innerFoo()被称为使用,foo将已经定义,这将工作。出于这个原因,GraphQL模式支持创建字段作为函数。

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

真的非常感谢你,这完美的工作。详细的答案大大增加了我对语言的理解 – Davey