0

我对以下场景有疑问:如果您使用setVariables中继道具中的方法并更改变量的方式,则中继必须从服务器检索其他数据(例如,单击以下操场示例中的“加载更多故事”接力游戏)。

我希望在收听readyState带有值的回调之后ready = truedone = true道具包含新获取的信息。就像在操场上的例子一样,在numStoriesToLoad将初始值 3 增加 1 之后,道具viewer.storyFeed.edges.length是 4。

实际发生的是,即使在收到命名回调之后,道具仍然具有旧值。如果这种行为是故意的,你如何链接setVariables依赖于前一个调用结果的调用?

4

1 回答 1

0

setVariables不会立即更新变量。

它实际上进入了挂起状态,并将继续返回旧变量,直到 props 被新数据填充。

如果您想查看它是如何处理的,请查看该_runVariables功能。RelayContainer似乎在ReadyStateCallback调用时,新的道具还没有被填充。

来源: https ://github.com/facebook/relay/blob/0ba7d8c1cf2899ec2ac3e779ac7dedbff5f9d092/src/container/RelayContainer.js#L242-L322

也许你可以在componentWillReceiveProps那时处理?

编辑:刚刚发现这个:

https://github.com/facebook/relay/blob/0ba7d8c1cf2899ec2ac3e779ac7dedbff5f9d092/docs/APIReference-Container.md#example-5

setVariables 不会立即改变变量,而是创建一个挂起的状态转换。variables 将继续返回以前的值,直到 this.props 填充了满足新变量值的数据。

于 2015-12-16T19:18:51.730 回答