【问题标题】:Relay and redux - initialVariablesRelay 和 redux - initialVariables
【发布时间】:2016-04-08 00:09:43
【问题描述】:

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

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

如果我想设置用户 ID 中继变量,我可以在组件的生命周期方法之一中进行。然而,relay 期望在initialVariables 中声明一个值。由于这是在模块加载时评估的,因此它无法访问 redux 存储。

作为一种解决方法,我已将 'NULL' 硬编码为中继的 initialVariables 字典中的 userId 变量。但是,这会导致中继发出一个初始请求,将其作为用户 ID 传递,然后在生命周期方法运行后发出另一个请求 - 调用 setVariables - 将用户 ID 更新为来自商店的真实用户 ID。这也会导致组件在第二次调用完成之前呈现不完整的数据。

有没有更好的方法让relay和redux一起玩,这样我就可以从redux中的值设置relay变量?我不希望它为了性能而进行 2 次网络调用,也因为我不希望组件呈现不完整的数据。

我要解释的示例代码是:

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
        }
      }
    `
  }
});

【问题讨论】:

    标签: redux relayjs


    【解决方案1】:

    如果你想使用中继,我感觉你可能想改变你对当前用户的看法。

    为什么 currentUser 不是您架构上的字段,而不是传递您当前用户的 id 并获取它?在标头中传递您的令牌,让您的服务器返回您的 currentUser 与否。

    【讨论】:

    • 因为我需要为当前用户请求数据。例如。当前用户的喜欢列表。在这种情况下,我有一个由用户 ID 参数化的 Likes 端点来检索喜欢的对象。用户可以检索其他用户的喜欢。我对用户也有同样的事情,所以只传递当前用户的 ID 而不是使用专用端点来获取当前用户的 ID 更有意义。
    猜你喜欢
    • 2016-10-28
    • 2018-05-17
    • 2017-09-04
    • 2018-02-12
    • 2017-10-15
    • 2017-03-13
    • 2016-07-21
    • 2016-02-10
    • 2017-08-01
    相关资源
    最近更新 更多