경고 : 다른 구성 요소의 함수 본문 내부에서 구성 요소를 업데이트 할 수 없습니다. (리 액트 네이티브)

루카스 마르케스

나는 반응 네이티브 및 자바 스크립트에 익숙하지 않습니다. 초기화 페이지에서 인증 흐름을 사용하여 사용자가 로그인되었는지 확인한 다음 각 페이지로 리디렉션하려고했습니다. 사용자가 로그인하면 메시지가 표시되고 다른 페이지로 이동합니다.

에러 메시지, 스크린 샷

다음은 인증 페이지에서 사용되는 코드입니다.

    import React from 'react';
import { View, Text, TouchableOpacity } from 'react-native';
import { FontAwesome5 } from '@expo/vector-icons';
import { useNavigation } from '@react-navigation/native';
import styles from './styles';

import { isSignedIn, getUserType } from '../../services/auth';

export default function(){

    const navigation = useNavigation()

    async function goToLoginOng(){
        navigation.navigate('Login', {
            userType: 'ong',
            route: 'sessions'
        })
    }
    async function goToLoginUser(){
        navigation.navigate('Login', {
            userType: 'user',
            route: 'userlogin'
        })
    }

    async function userisLogged() {
        if (isSignedIn){
            const userType = getUserType();
            if (userType === 'user'){
                navigation.navigate('Incidents')
            }
            else {
                navigation.navigate('Profile')
            }
        }
    }

    userisLogged();

    return(
        <View style={styles.container}>
            <Text style={styles.bigQuestion} >Quem é você?</Text>
            <TouchableOpacity style={styles.box} onPress={goToLoginUser}>
                <FontAwesome5 name='user' size={60} color='#FFF' style={styles.iconStyle} />
                <Text style={styles.title}>Pessoa</Text>
            </TouchableOpacity>
            <TouchableOpacity style={styles.box} onPress={goToLoginOng}>
                <FontAwesome5 name='users' size={60} color='#FFF' style={styles.iconStyle} />
                <Text style={styles.title}>ONG</Text>
            </TouchableOpacity>
        </View>
    )
}

여기에 내가 사용한 인증 기능이 있습니다.

    import React from 'react';
import { AsyncStorage } from 'react-native';

export const isSignedIn = async() => {
    const response =  await AsyncStorage.getItem('userToken')
    if (response !== null){
        return true
    }
    else {
        return false
    }
}

export const getUserType = async () => {
    const response =  await AsyncStorage.getItem('userType')
    return response;
}

이것을 개선하는 방법이나 다른 최선의 방법을 제안 할 수 있다면 미리 감사드립니다.

DevMaster

문제는 userisLogged()기능적 구성 요소 내부에서 직접 트리거 된다는 것 입니다.

이는 userisLogged()이 인증 페이지가 렌더링 될 때마다 트리거 됨을 의미 합니다.

따라서이 함수는 페이지가 처음 렌더링 될 때 한 번 트리거됩니다.

useEffect후크 를 사용하여 구현할 수 있습니다 .

useEffect(() => {
   userisLogged()
}, [])

위의 코드는 componentDidMount()클래스 구성 요소와 같습니다.

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

Related 관련 기사

뜨겁다태그

보관