2016-07-10 1 views
2

я следующий маршрутизатор и маршруты, используя react-router-relay пакетGraphQL с React маршрутизатор реле: Ожидаемый типа Int, найденной строку для числового маршрута

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

Мой StoreType из GraphQL выглядит следующим образом, с полем пользователя, принимающим аргумент идентификатор, представляющий ненулевое целое число:

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 маршрута:

import React from 'react'; 
import Relay from 'react-relay' 


class User extends React.Component { 
    render() { 
     return <div> 
      User goes here! 
     </div>; 
    } 
} 

User = Relay.createContainer(User, { 
    initialVariables: { 
     userId: null, 
    }, 

    fragments: { 
     store:() => Relay.QL` 
      fragment on Store { 
       user(id: $userId) { 
        name 
       } 
      } 
     ` 
    } 
}); 

export default User; 

Когда я посещаю/пользователь/1 в браузере, реагирующий-маршрутизатор-релейное лакомство :userId в виде строки из маршрута, а не целое, а GraphQL возвращает сообщение JSON-закодированные ошибки "Argument \"id\" has invalid value \"1\".\nExpected type \"Int\", found \"1\"."

Есть ли способ передать аргумент userId, переданный в URL-адресе, целому числу? Или есть собственный скалярный тип GraphQL, который поддерживает хорошо сформированные числовые строки, а также целые числа? Любой ввод или руководство по этому вопросу оцениваются.

ответ

1

я столкнулся с той же проблемой в последнее время и в конечном итоге с этим решением:

<Route 
      path="/user/:userId" 
      component={User} 
      queries={StoreQueries} 
      prepareParams={({userId}) => ({userId: parseInt(userId, 10)})}/> 
     /> 
Смежные вопросы