【发布时间】:2018-11-07 17:24:21
【问题描述】:
我正在开发一个使用 WebView 作为应用主屏幕的 React Native 应用。
当应用从后台转到前台时,WebView 会重新加载。如何停止重新加载?
这个answer 建议在ViewDidLoad() 而不是ViewDidAppear() 或ViewWillAppear() 中加载WebView。这是一个真正的解决方案吗?如何确认或更改 React Native 加载 WebView 的方式?
作为一个 hacky 解决方案,我使用 onNavigationStateChange 将当前 URL 保存在 AsyncStorage 中,然后在应用程序进入前台时加载此 URL。这个解决方案不是很好,因为它:
- 打破浏览器历史记录,影响 javascript 后退按钮
- 不记得表单状态
- 可能会将用户发送到他们无法直接访问的页面,从而导致他们被发送到 404
所以我更喜欢停止重新加载的解决方案,至少在应用只是暂时处于后台的情况下。
【问题讨论】:
-
我认为 Webview 在进入前台时并不意味着重新加载。在我的 RN 应用程序中,我们使用 WKWebView 并且页面在来自后台时保持加载状态。当应用程序唤醒时,您的状态可能会发生变化,这会导致包含 WebView 的组件重新呈现。您可以尝试添加一个 should ComponentUpdate 以确保 WebView 仅在需要时重新呈现。
-
谢谢@needsleep,你是对的。我的问题是由 React Navigation SwitchNavigator 引起的,它“在您切换时将路由重置为默认状态”。此重置导致 WebView 重新加载。
标签: react-native webview uiwebview wkwebview