继电器和redux-初始变量

继电器和redux-初始变量,redux,relayjs,Redux,Relayjs,中继定义graphql片段。我有一个将当前用户的ID作为参数 当前用户ID存储在我的redux存储中 如果我想设置用户ID中继变量,我可以在组件的生命周期方法中进行设置。但是,继电器需要在初始变量中声明一个值。由于这是在模块加载时评估的,因此它无法访问redux存储 作为一种解决方法,我在relay的initialVariablesdict中将'NULL'硬编码为userId变量。但是,这会导致relay发出初始请求,将其作为用户ID传递,然后,在lifecycle方法运行后,另一个请求调用se

中继定义graphql片段。我有一个将当前用户的ID作为参数

当前用户ID存储在我的redux存储中

如果我想设置用户ID中继变量,我可以在组件的生命周期方法中进行设置。但是,继电器需要在
初始变量中声明一个值。由于这是在模块加载时评估的,因此它无法访问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更有意义。