首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >带有React路由器中继的GraphQL :应为Int类型,找到数字路由的字符串

带有React路由器中继的GraphQL :应为Int类型,找到数字路由的字符串
EN

Stack Overflow用户
提问于 2016-07-11 02:20:43
回答 1查看 768关注 0票数 2

我有以下使用react-router-relay包的路由器和路由

代码语言:javascript
复制
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如下所示,其中user字段接受表示非空整数的id参数:

代码语言:javascript
复制
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路由的中继容器:

代码语言:javascript
复制
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;

当我在浏览器中访问/user/1时,react-router-relay将:userId视为来自路由的字符串,而不是整数,并且GraphQL返回JSON编码的错误消息"Argument \"id\" has invalid value \"1\".\nExpected type \"Int\", found \"1\"."

有没有办法将URL中传递的userId参数转换为整数?或者,是否有支持格式良好的数字字符串和整数的自定义GraphQL标量类型?任何关于这方面的意见或方向都是值得感谢的。

EN

回答 1

Stack Overflow用户

发布于 2016-11-03 00:51:55

我最近遇到了同样的问题,并最终得到了这个解决方案:

代码语言:javascript
复制
<Route
            path="/user/:userId"
            component={User}
            queries={StoreQueries}
            prepareParams={({userId}) => ({userId: parseInt(userId, 10)})}/>
        /> 
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38295089

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档