Skip to content
Documentação
Avançado
React Native

React Native

💡

Atualize para a última versão (≥ 1.0.0) para experimentar esta personalização.

Diferentemente do React rodando no navegador, React Native tem uma experiência de usuário diferente. Por exemplo, não há tabulação de foco, a troca de foco do background para o app é considerada como um foco em vez de uma troca de foco de app para o background. Para customizar estes comportamentos, você pode substituir os listeners de focus e online do navegador padrão por listeners de foco e online do React Native e configurar o SWR para usá-los.

Exemplo

Configuração Global

Você pode envolver sua aplicação em SWRConfig e pré-configurar todas as configurações lá

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

Personalize Eventos focus e reconnect

Existem algumas configurações que você precisa cuidar, como isOnline, isVisible, initFocus e initReconnect.

isOnline e isVisible são funções que retornam um boolean, para determinar se o aplicativo está "ativo". Por padrão, o SWR resgatará uma revalidação se essas condições não forem atendidas.

Ao usar initFocus e initReconnect, também é necessário configurar um cache provider personalizado. Você pode usar um Map() vazio ou qualquer armazenamento que preferir.

<SWRConfig
  value={{
    provider: () => new Map(),
    isOnline() {
      /* Personaliza o detector de estado da rede */
      return true
    },
    isVisible() {
      /* Personaliza o detector de estado de visibilidade */
      return true
    },
    initFocus(callback) {
      /* Registre o listener com seu provider de estado */
    },
    initReconnect(callback) {
      /* Registre o listener com seu provider de estado */
    }
  }}
>
  <App />
</SWRConfig>

Vamos pegar o initFocus como exemplo:

import { AppState } from 'react-native'
 
// ...
 
<SWRConfig
  value={{
    provider: () => new Map(),
    isVisible: () => { return true },
    initFocus(callback) {
      let appState = AppState.currentState
 
      const onAppStateChange = (nextAppState) => {
        /* Se estiver voltando do modo de fundo ou inativo para o modo ativo */
        if (appState.match(/inactive|background/) && nextAppState === 'active') {
          callback()
        }
        appState = nextAppState
      }
 
      // Assine os eventos de mudança de estado do aplicativo
      const subscription = AppState.addEventListener('change', onAppStateChange)
 
      return () => {
        subscription.remove()
      }
    }
  }}
>
  <App>
</SWRConfig>

Para initReconnect, é necessário algumas bibliotecas de terceiros, como NetInfo (opens in a new tab) para assinar o status da rede. A implementação será semelhante ao exemplo acima: recebendo uma função callback e acionando-a quando a rede se recuperar do offline, o SWR pode iniciar uma revalidação para manter seus dados atualizados.