Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-cloud-platform/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
React router 带有React路由器中继的GraphQL:应为Int类型,找到数值路由的字符串_React Router_Graphql_Relay_React Router Relay - Fatal编程技术网

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

React router 带有React路由器中继的GraphQL:应为Int类型,找到数值路由的字符串,react-router,graphql,relay,react-router-relay,React Router,Graphql,Relay,React Router Relay,我有以下路由器和路由使用包 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.

我有以下路由器和路由使用包

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;
从“React”导入React;
从“反应继电器”导入继电器
类用户扩展了React.Component{
渲染(){
返回
用户到这里来!
;
}
}
User=Relay.createContainer(用户{
初始变量:{
userId:null,
},
片段:{
存储:()=>Relay.QL`
存储中的碎片{
用户(id:$userId){
名称
}
}
`
}
});
导出默认用户;
当我在浏览器中访问/user/1时,react router relay将
:userId
视为路由中的字符串,而不是整数,GraphQL返回JSON编码的错误消息
“参数\“id\”具有无效值\“1\”\n预期类型\“Int\”,找到\“1\”


有没有办法将URL中传递的userId参数强制转换为整数?或者是否存在支持格式良好的数字字符串和整数的自定义GraphQL标量类型?对此,我们非常感谢您的任何意见或指导。

我最近遇到了同样的问题,最终得到了以下解决方案:

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

我最后就是这么做的。这仍然是v4中最好的解决方案吗?有点糟糕…
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;
<Route
            path="/user/:userId"
            component={User}
            queries={StoreQueries}
            prepareParams={({userId}) => ({userId: parseInt(userId, 10)})}/>
        />