От рендера ничего не вернулось. Обычно это означает, что оператор return отсутствует. Или, чтобы ничего не отображать, верните null. React-native, асинхронное хранилище

const ListYourPostsStackScreen = ({navigation}) => {
    // const a = await retrieveData() ;
    // console.log(a);
    AsyncStorage.getItem('user')
    .then(value => {
        console.log(value);
        if (value === null) {
            console.log('something');
            return (
                <>
                <ListYourPostsStack.Navigator screenOptions={{
                    headerStyle: {
                        backgroundColor: '#009387',
                    },
                    initialRouteName: 'SignIn',
                    headerTintColor: '#fff',
                    headerTitleStyle: {
                        fontWeight: 'bold'
                    }
                }}>
                    <ListYourPostsStack.Screen name="SignIn" component={SignInScreen} options={{
                        title:'Chi tiết phòng',
                        headerShown:false
                    }} />
                    <ListYourPostsStack.Screen name="SignUp" component={SignUpScreen} options={{
                        title:'Chi tiết phòng',
                        headerShown:false
                    }} />

                </ListYourPostsStack.Navigator>
                </>
            );

        }
        return (
        <>
            <ListYourPostsStacks.Navigator screenOptions={{
                headerStyle: {
                    backgroundColor: '#009387',
                },
                initialRouteName: 'ListYourPostScreen',
                headerTintColor: '#fff',
                headerTitleStyle: {
                    fontWeight: 'bold'
                }
            }}>
                <ListYourPostsStacks.Screen name="ListYourPostScreen" component={ListYourPostScreen} options={{
                    title:'Overview',
                    headerShown:false
                }} />
                <ListYourPostsStacks.Screen name="Details" component={Details2Screen} options={{
                title:'Chi tiết phòng'
                }} />
                <ListYourPostStacks.Screen name="AddPostScreen" component={AddPostScreen} options={{
                title:'Thêm bài đăng'
                }} />
                <ListYourPostsStacks.Screen name="AddPostScreen2" component={AddPostScreen2} options={{
                title:'Thêm hỉnh ảnh'
                }} />
                <ListYourPostsStacks.Screen name="SignIn" component={SignInScreen} options={{
                    title:'Chi tiết phòng',
                    headerShown:false
                }} />
                <ListYourPostsStacks.Screen name="SignUp" component={SignUpScreen} options={{
                    title:'Chi tiết phòng',
                    headerShown:false
                }} />
                <ListYourPostsStack.Screen name="EditPostScreen" component={EditPostScreen} options={{
                    title:'Sửa bài đăng',
                }} />
                <ListYourPostsStack.Screen name="EditPostScreen2" component={EditPostScreen2} options={{
                    title:'Sửa ảnh',
                }} />
            </ListYourPostsStack.Navigator>
            </>
        )
    }).catch(e => {
        console.log(e);
    })
};

Привет. Я новичок в React-native. Я вьетнамец, так что не обращайте внимания на язык. Этот код предназначен для проверки пользователя. Если пользователь существует, он вернет экран домашней страницы, в противном случае он вернет экран входа/регистрации. Я делаю свой проект в университете. Я не знаю, почему я ошибаюсь. Хотя я возвращаю все вещи в "затем функцию". Значение равно null, тогда я делаю console.log("что-то") и получаю его на консоли, но возврат не выполняется. Помогите мне, пожалуйста. Извините из-за моего плохого английского.


person Gia Khánh    schedule 13.05.2020    source источник


Ответы (1)


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

const ListYourPostsStackScreen = ({navigation}) => {
   const [user, setUser] = useState([]);

   useEffect(() => {
     AsyncStorage.getItem('user').then(value => {
        setUser(value);
     });
   }, [user]);

   return (
     <>
       {/* Your HTML markup */}
       {
          user.map((person, index) => <p> { person.name }</p>
       }
     </>
   )
}
person Vaibhav    schedule 13.05.2020