Реагировать навигация - Как получить доступ к this.props.navigation в экземпляре Axios - PullRequest
0 голосов
/ 24 сентября 2018

У меня есть экземпляр axios, чтобы установить baseURL и установить interceptors, но каждый раз, когда я хочу использовать this.props.navigation, я получаю сообщение об ошибке undefined is not an object (this.props.navigation)

вот код:

// Axios Setting
api.axiosInstance.interceptors.response.use((response)=>{
  return response
}, (error) => {
  if(error.response == undefined){
    return Promise.reject(
    Alert.alert("Perhatian","Tidak dapat terhubung ke server \n\n Cek koneksi internet anda",[
      {text:"OK", onPress:()=>BackHandler.exitApp()}
    ])
    )
  } else if (error.response.status === 401) {
    return Promise.reject(
      goToLogin("Login", null)
    );
  }
})

//goToLogin Function on different js :
export function goToLogin(routeName, params){
  return(
    Alert.alert("Peringatan", "Sepertinya akun ini sudah login di perangkat lain\n\nsilahkan logout dan login kembali untuk dapat mengakses kembali",[
      {text:'Logout', onPress:()=>{
        console.log(this.props) // i got undefined on this line
        // this.props.navigation.dispatch(
        //   NavigationActions.navigate({
        //     routeName:routeName,
        //     key:routeName,
        //     params:params
        //   })
        // ),
        // deleteAllUser()
      }}
    ],{cancelable: false})
  )
}

Как получить доступ к this.props.navigation, когда компонент (axios) не отображается на экране?

1 Ответ

0 голосов
/ 24 сентября 2018

Ваша проблема в том, что вы пытаетесь использовать навигационную опору из функций, которые не являются компонентами React и, вероятно, вообще не имеют доступа к навигации.В этих случаях рекомендуется использовать службу навигации, как описано в документах

. Вот простой пример того, как вы можете использовать его с перехватчиками Axios, чтобы лучше понять, что яЯ предлагаю:

https://snack.expo.io/BkLWor8FX

В App.js я выполняю GET-вызов с использованием axios на несуществующий URL-адрес, например "https://www.google.coms". Перехватчик обработает неудавшийся запрос(Interceptors.js), и он будет использовать NavigationService (NavigationService.js) для перенаправления на экран ошибок.

Я думаю, что вы можете использовать нечто подобное в вашем случае. Удачи!

...