我学习继电器,我懂了工作,但有时感觉就像是一个偶然的机会:)继电器抱怨片段变量,但没有碎片的有变数
对不起,如果我让初学者在这里犯错误,我已经阅读了手册和所有例子,但我似乎无法将我的头围绕在一起。
无论如何,我现在有以下问题。
我的模式是这样的:
所有的数据都在{}观众,这需要认证的保健访问。演员领域只是其中之一。
Actor是UserType的一个实例,当前登录的用户。
我想要一个理智的组件层次结构,其中顶层组件仅获取用户作为道具(并为其所需属性提供片段)。但接力赛表示,我做得不对,我不确定我做错了什么。
我的代码如下所示(相当混乱的时刻,因为我测试的东西出来):
class UserRegistrationPage extends React.Component {
render() {
const user = this.props.user;
return (
<View>
<Text>Email: {user.email}</Text>
</View>
);
}
submit(model) {
const user = this.props.user;
this.props.relay.commitUpdate(
new UpdateUserMutation({
id: user.id,
...model
}, {
onSuccess: response => {
console.log("SUCCESS!");
console.log(response);
},
onFailure:() => {
console.log("FAIL!");
}
}));
}
}
UserRegistrationPage = Relay.createContainer(UserRegistrationPage, {
fragments: {
user:() => Relay.QL`
fragment on User {
email
}
`,
},
});
//////////////////////////////
class UserRegistrationViewer extends React.Component {
render() {
return <UserRegistrationPage user={this.props.actor} />
}
}
UserRegistrationViewer = Relay.createContainer(UserRegistrationViewer, {
fragments: {
actor:() => Relay.QL`
fragment on Viewer {
actor {
${UserRegistrationPage.getFragment('user')},
}
}
`,
},
});
/////////////////////////////////
class QueryConfig extends Relay.Route {
static routeName = 'UserRegistrationRoute';
static prepareParams = routeConfigParamsBuilder;
static queries = {
actor: (Component) =>
Relay.QL`
query {
viewer(token:$token) {
${Component.getFragment('actor')},
}
}
`,
};
}
export const UserRegistrationPageComponent = (parentProps) => {
return (
<Relay.Renderer
environment={Relay.Store}
Container={UserRegistrationViewer}
queryConfig={new QueryConfig()}
render={({done, error, props, retry, stale}) => {
if (error) {
return <View><Text>Error!</Text></View>;
} else if (props) {
return <UserRegistrationViewer {...parentProps} {...props} />;
} else {
return <View><Text>Loading...</Text></View>;
}
}}
/>
)
};
而且我发现了以下错误。
警告:RelayContainer:组分
UserRegistrationPage
被渲染 与从用于获取片段user
变量不同的变量。用变量(not fetched)
获取片段,但用变量{}
呈现 。这可以表示两个 可能性中的一个: - 父级在查询中设置了正确的变量 -UserRegistrationPage.getFragment('user', {...})
- 但在渲染组件时未传递 相同的变量。请务必通过<UserRegistrationPage ... />
告诉 组件使用哪些变量。 - 您有意将虚假数据传递给此组件,在这种情况下请忽略此警告。
所以我有几个问题。
1)为什么我得到那个错误,我该如何解决? 我不明白为什么它会抱怨片段变量时,没有任何片段有任何变量。
2)如何使UserRegistrationPage获取this.props.user? 我应该制作一个映射查询响应的组件树层次结构吗? 在某些时候,我有this.props.actor.user,但我不想让组件知道查询响应结构,只知道它感兴趣的对象。
3)名称是查询以某种方式与片段的名称结合在一起?
任何帮助,来改进,提示和答案的建议是非常值得欢迎的,我开始砰我的头靠在这里的墙壁:)