Relay 和 redux - initialVariables
Posted
技术标签:
【中文标题】Relay 和 redux - initialVariables【英文标题】:Relay and 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
`
);
【问题讨论】:
【参考方案1】:如果你想使用中继,我感觉你可能想改变你对当前用户的看法。
为什么 currentUser 不是您架构上的字段,而不是传递您当前用户的 id 并获取它?在标头中传递您的令牌,让您的服务器返回您的 currentUser 与否。
【讨论】:
因为我需要为当前用户请求数据。例如。当前用户的喜欢列表。在这种情况下,我有一个由用户 ID 参数化的Likes
端点来检索喜欢的对象。用户可以检索其他用户的喜欢。我对用户也有同样的事情,所以只传递当前用户的 ID 而不是使用专用端点来获取当前用户的 ID 更有意义。以上是关于Relay 和 redux - initialVariables的主要内容,如果未能解决你的问题,请参考以下文章
在 React Native 应用程序中将 Relay 与 Redux 集成
将 Relay.Store 视为全局存储(即 redux 存储)
SO Relay QueryRenderer - TypeError:this.props.render 不是函数
未知插件“Relay” - React、GraphQL 和 Relay
如何在 TypeScript 中使用 Relay Modern(babel-plugin-relay 和 relay-compiler)?