【问题标题】:React Native: Is it better to initiate loading a screen's resources before or after navigating to screen?React Native:在导航到屏幕之前还是之后开始加载屏幕资源更好?
【发布时间】:2020-10-24 08:13:43
【问题描述】:

在我的 React Native 应用程序中,我有一个 screenA,它有一个按钮可以将我带到 screenBscreenB 需要必须通过 API 调用从服务器获取的数据(this.props.fetchData(param1, param2)。我在screenA 上有param1param2

现在,我这样做的方式是将param1param2 作为导航参数从screenA 传递到screenB,然后当screenB 挂载时,我调用this.props.fetchData

所以我的代码是:

屏幕A

this.props.navigation.navigate('screenB', {param1, param2});

屏幕B

componentDidMount() {
  this.props.fetchData(this.props.navigation.state.params.param1, this.props.navigation.state.params.param2);
}

我想知道的:

是否有任何理由从screenA 调用this.props.fetchData()?资源保存在 Redux 存储中,因此无论我从哪里加载它们都可以从 screenB 访问。我的代码如下所示:

屏幕A

this.props.fetchData(param1, param2);
this.props.navigation.navigate('screenB', {param1, param2});

屏幕B

<nothing>

我可以想象到的好处是,由于导航到 screenB 需要有限的时间,如果我在导航到它之前开始加载资源,用户就不必等待很长时间screenB 在资源加载之前。 缺点是,如果导航到 screenB 的调用不起作用,资源将被加载。

有人知道选择一种方法而不是另一种方法的任何理由吗?

【问题讨论】:

    标签: javascript reactjs react-native redux react-redux


    【解决方案1】:

    我不会让导航导航方法依赖于 API 调用。最重要的商店将在初始应用启动时加载。如果您直接在屏幕 a 的开头加载屏幕 b 的数据怎么办?如果数据可以通过 Redux 获得,那么我不喜欢通过导航传递参数。

    【讨论】:

    • 当然,我同意。对于这个应用程序,screenA 包含一个项目列表,单击其中一个会将您带到screenB,其中screenB 将显示该单击项目的信息。所以param1param2 是在您单击该项目时确定的,所以不幸的是我无法在screenA 加载时加载它们。但是,是的,我同意你所说的一切。
    【解决方案2】:

    我看到在屏幕 A 上调用 API 时可能会出现一些缺点:

    1. 如果屏幕 B 从另一个屏幕 C 打开,那么在这种情况下,您必须再次在屏幕 C 上执行 API 调用并传递数据。
    2. 如果由于某种原因由于互联网连接速度慢,API 需要很长时间,那么它可能会在屏幕 B 上显示一段时间不正确的状态,并可能稍后更新它。
    3. 屏幕 A 可能会在导航时卸载,而 API 调用正在进行中,在这种情况下,由于屏幕 A 已经卸载,您可能永远无法在屏幕 B 上获得更新的道具。

    您可能会发现,如果这些场景适合您,那么您可以继续在屏幕 A 上调用 API 的方法。

    【讨论】:

    • 这是一个很好的建议,谢谢。 #1 是有道理的,因为即使我目前仅通过screenA 导航到screenB,从screenB 进行API 调用仍然可以在将来从其他屏幕导航到它。 #2 不适用于我的情况,因为我有一个加载指示器,但这在我没有加载指示器的任何屏幕上都是有效的。 #3 我从来没有遇到过,但我很高兴你指出了这一点。我会坚持原来的方法,以防万一发生这种情况。再次感谢!
    • 很高兴听到这个答案对您有所帮助。谢谢 :) 。如果对您有帮助,您可以接受答案。谢谢:)
    • 这让我要等 x 分钟才能接受 ;)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-29
    • 1970-01-01
    • 1970-01-01
    • 2018-07-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多