Как использовать async / await с ловушкой useEffect React, я пробовал много примеров и ничего не работает - PullRequest
0 голосов
/ 10 июля 2019

Мне нужно реализовать async / await с помощью ловушки Eact React. Я перепробовал много способов. Каждый раз, когда у меня появляется ошибка: хуки могут вызываться только внутри тела компонента функции.

import React, { useEffect } from 'react'
import { ActivityIndicator, StatusBar, StyleSheet, View } from 'react-native'
import * as Keychain from 'react-native-keychain'
import useEffectAsync from '../utils'

const styles = StyleSheet.create({
  container: {
    justifyContent: 'center',
    alignItems: 'center'
  }
})

const AuthLoadingScreen = ({ navigation }) => {
  useEffect(() => {
    const fetchData = async () => {
      const data = await Keychain.getGenericPassword()
      console.log('data', data)
      navigation.navigate(data ? 'App' : 'Auth')
    }
    fetchData()
  }, [])

  const { container } = styles
  return (
    <View style={container}>
      <ActivityIndicator />
      <StatusBar barStyle="default" />
    </View>
  )
}

export { AuthLoadingScreen }

Ответы [ 2 ]

0 голосов
/ 11 июля 2019

Все выглядит хорошо, но попробуйте это также,

export const AuthLoadingScreen = ({ navigation }) => {...}

Или

const AuthLoadingScreen = ({ navigation }) => {...}

export default AuthLoadingScreen;

0 голосов
/ 11 июля 2019

Я бы обернул его в анонимную функцию и немедленно вызвал бы:

Я мог бы попробовать это:

const AuthLoadingScreen = ({ navigation }) => {
  useEffect(() => {
   (async () => {
      const data = await Keychain.getGenericPassword()
      console.log('data', data)
      navigation.navigate(data ? 'App' : 'Auth')
    })()

  }, [])

  const { container } = styles
  return (
    <View style={container}>
      <ActivityIndicator />
      <StatusBar barStyle="default" />
    </View>
  )
}

Если это сработало, дайте мне знать, потому что я тоже изучаю React Hooks: D.

...