2016-07-10 42 views
2

我有以下的路由器和使用react-router-relayGraphQL與之反應路由器中繼:預計Int類型,找到字符串的數字路線

ReactDOM.render(
    <Router 
     history={browserHistory} 
     render={applyRouterMiddleware(useRelay)} 
     environment={Relay.Store} 
    > 
      <Route 
       path="/user/:userId" 
       component={User} 
       queries={StoreQueries} 
      /> 
    </Router>, 
    document.getElementById('root') 
); 
路線

從GraphQL我的storetype如下所示,與用戶現場接受

let StoreType = new GraphQLObjectType({ 
    name: 'Store', 
    fields:() => ({ 
     user: { 
      type: UserType, 
      args: { 
       id: { 
        type: new GraphQLNonNull(GraphQLInt) 
       } 
      }, 
      resolve: (root, args) => db.user.findById(args.id) 
     }, 
    }) 
}) 

我對user/:userId路線繼電器容器:表示一個非空整數的id參數

當我訪問/用戶/ 1中的瀏覽器中,反應路由器中繼對待:userId從路線而不是整數的字符串,和GraphQL返回JSON編碼的錯誤消息"Argument \"id\" has invalid value \"1\".\nExpected type \"Int\", found \"1\"."

是否有任何將URL中傳遞的userId參數強制轉換爲整數?或者是否有自定義的GraphQL標量類型,它支持格式正確的數字字符串以及整數?任何輸入或方向對此表示讚賞。

回答

1

最近我面臨着同樣的問題,結束了此解決方案:

<Route 
      path="/user/:userId" 
      component={User} 
      queries={StoreQueries} 
      prepareParams={({userId}) => ({userId: parseInt(userId, 10)})}/> 
     />