Skip to content
Docs
Avancé
React Native

React Native

💡

Mettre à jour vers la dernière version (≥ 1.0.0) pour utiliser cette fonctionnalité.

Au contraire de React qui s'exécute dans les navigateurs, React Native a une expérience utilisateur très différente. Par exemple, il n'y a pas de "focus de l'onglet", le passage de l'arrière-plan à l'application est considéré comme un "focus" au lieu de cela. Pour personnaliser ces comportements, vous pouvez remplacer les écouteurs d'événements par défaut focus et online du navigateur par la détection de l'état de l'application React Native et d'autres API portées nativement, et configurer SWR pour les utiliser.

Exemple

Configuration globale

Vous pouvez envelopper votre application sous SWRConfig et préconfigurer toutes ces configurations

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

Personnaliser les événements focus et reconnect

Il y a quelques configurations dont vous devez vous occuper, telles que isOnline, isVisible, initFocus et initReconnect.

isOnline et isVisible sont des fonctions qui renvoient un booléen, pour déterminer si l'application est "active". Par défaut, SWR abandonnera une revalidation si ces conditions ne sont pas remplies.

Lorsque vous utilisez initFocus et initReconnect, il est nécessaire de configurer un fournisseur de cache personnalisé. Vous pouvez utiliser un Map() vide ou tout autre stockage que vous préférez.

<SWRConfig
  value={{
    provider: () => new Map(),
    isOnline() {
      /* Personnaliser le détecteur d'état du réseau */
      return true
    },
    isVisible() {
      /* Personnaliser le détecteur d'état de visibilité */
      return true
    },
    initFocus(callback) {
      /* Enregistrer le détecteur avec votre fournisseur d'état */
    },
    initReconnect(callback) {
      /* Enregistrer le détecteur avec votre fournisseur d'état */
    }
  }}
>
  <App />
</SWRConfig>

Prennons initFocus comme exemple :

import { AppState } from 'react-native'
 
// ...
 
<SWRConfig
  value={{
    provider: () => new Map(),
    isVisible: () => { return true },
    initFocus(callback) {
      let appState = AppState.currentState
 
      const onAppStateChange = (nextAppState) => {
        /* Si l'application revient du mode arrière-plan ou d'inactif au mode actif */
        if (appState.match(/inactive|background/) && nextAppState === 'active') {
          callback()
        }
        appState = nextAppState
      }
 
      // Ecoute des événements de changement d'état de l'application
      const subscription = AppState.addEventListener('change', onAppStateChange)
 
      return () => {
        subscription.remove()
      }
    }
  }}
>
  <App>
</SWRConfig>

Pour initReconnect, il faut quelques bibliothèques tierces comme NetInfo (opens in a new tab) pour s'abonner à l'état du réseau. La mise en œuvre sera similaire à l'exemple ci-dessus : recevoir une fonction callback et la déclencher lorsque le réseau revient du mode hors ligne, de sorte que SWR puisse lancer une revalidation pour maintenir vos données à jour.