继电器和redux-初始变量
中继定义graphql片段。我有一个将当前用户的ID作为参数 当前用户ID存储在我的redux存储中 如果我想设置用户ID中继变量,我可以在组件的生命周期方法中进行设置。但是,继电器需要在继电器和redux-初始变量,redux,relayjs,Redux,Relayjs,中继定义graphql片段。我有一个将当前用户的ID作为参数 当前用户ID存储在我的redux存储中 如果我想设置用户ID中继变量,我可以在组件的生命周期方法中进行设置。但是,继电器需要在初始变量中声明一个值。由于这是在模块加载时评估的,因此它无法访问redux存储 作为一种解决方法,我在relay的initialVariablesdict中将'NULL'硬编码为userId变量。但是,这会导致relay发出初始请求,将其作为用户ID传递,然后,在lifecycle方法运行后,另一个请求调用se
初始变量中声明一个值。由于这是在模块加载时评估的,因此它无法访问redux存储
作为一种解决方法,我在relay的initialVariables
dict中将'NULL'
硬编码为userId变量。但是,这会导致relay发出初始请求,将其作为用户ID传递,然后,在lifecycle方法运行后,另一个请求调用setVariables
,将用户ID更新为存储中的真实ID。这也会导致组件在第二次调用完成之前呈现不完整的数据
有没有更好的方法让relay和redux一起玩,这样我就可以根据redux中的值设置relay变量?我不希望它为了性能而进行两次网络调用,也因为我不希望组件使用不完整的数据进行渲染
我试图解释的示例代码是:
class App extends React.Component {
componentWillMount() {
const relay = this.props.relay;
relay.setVariables({ userId: this.props.userStore.id});
}
...
}
export default Relay.createContainer(connect(fullStoreSelector)(App), {
initialVariables: {
userId: 'NULL' // we need to pass a dud string here that
// returns empty data because we have to
// set relay variables in componentDidMount
},
fragments: {
viewer: () => Relay.QL`
fragment on Viewer {
user(id: $userId) {
id
firstName
}
}
`
}
});
如果你想使用中继,我觉得你可能想改变你对当前用户的看法
为什么currentUser不是模式中的字段,而不是传递当前用户的id并获取它?在标题中传递令牌,让服务器返回当前用户或不返回当前用户。因为我需要请求当前用户的数据。例如,当前用户的喜好列表。在这种情况下,我有一个由用户ID参数化的Likes
端点来检索Likes。并且用户可以检索其他用户的喜好。我对用户也有同样的要求,因此只传递当前用户的ID比使用专用端点来获取当前用户的ID更有意义。