收到setVariables回调后的道具值

时间:2015-12-16 15:21:22

标签: relayjs

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

我希望在使用值readyStateready = true收听回调done = true后,道具包含新获取的信息。就像在操场示例中一样,在将numStoriesToLoad增加初始值3后,道具viewer.storyFeed.edges.length为4。

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

1 个答案:

答案 0 :(得分:0)

setVariables不会立即更新变量。

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

如果您想查看其处理方式,请查看_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不会立即改变变量,而是创建一个   待定状态转换。变量将继续返回   以前的值,直到this.props填充了数据   实现新的变量值。