跳至内容
文档
高级
React Native

React Native

💡

升级到最新版本(≥ 1.0.0)以体验此自定义功能。

与在浏览器中运行的 React 不同,React Native 具有非常不同的用户体验。例如,没有“选项卡焦点”,从后台切换到应用程序被认为是“焦点”而不是。要自定义这些行为,您可以使用 React Native 的应用程序状态检测和其他本机移植的 API 替换默认的浏览器 focusonline 事件监听器,并配置 SWR 以使用它们。

示例

全局设置

您可以将应用程序包装在 SWRConfig 下,并在那里预先配置所有配置

<SWRConfig
  value={{
    /* ... */
  }}
>
  <App>
</SWRConfig>

自定义 focusreconnect 事件

您需要处理一些配置,例如 isOnlineisVisibleinitFocusinitReconnect

isOnlineisVisible 是返回布尔值的函数,用于确定应用程序是否“处于活动状态”。默认情况下,如果这些条件不满足,SWR 会放弃重新验证。

使用 initFocusinitReconnect 时,还需要设置一个 自定义缓存提供程序。您可以使用空的 Map() 或您喜欢的任何存储。

<SWRConfig
  value={{
    provider: () => new Map(),
    isOnline() {
      /* Customize the network state detector */
      return true
    },
    isVisible() {
      /* Customize the visibility state detector */
      return true
    },
    initFocus(callback) {
      /* Register the listener with your state provider */
    },
    initReconnect(callback) {
      /* Register the listener with your state provider */
    }
  }}
>
  <App />
</SWRConfig>

initFocus 为例

import { AppState } from 'react-native'
 
// ...
 
<SWRConfig
  value={{
    provider: () => new Map(),
    isVisible: () => { return true },
    initFocus(callback) {
      let appState = AppState.currentState
 
      const onAppStateChange = (nextAppState) => {
        /* If it's resuming from background or inactive mode to active one */
        if (appState.match(/inactive|background/) && nextAppState === 'active') {
          callback()
        }
        appState = nextAppState
      }
 
      // Subscribe to the app state change events
      const subscription = AppState.addEventListener('change', onAppStateChange)
 
      return () => {
        subscription.remove()
      }
    }
  }}
>
  <App>
</SWRConfig>

对于 initReconnect,它需要一些第三方库,例如 NetInfo (在新标签页打开) 来订阅网络状态。实现将类似于上面的示例:接收 callback 函数,并在网络从脱机恢复时触发它,以便 SWR 可以启动重新验证以保持您的数据最新。