Крючки не ведут себя так, как ожидалось в React Native - PullRequest
0 голосов
/ 05 мая 2019

Следующий компонент пропускает обещание, возвращаемое из setStateFromGraphQL, как неразрешенное.

Я могу заставить код работать, сделав функцию асинхронной в useEffect, но это вызывает предупреждение.

    import React, { useState, useEffect } from 'react';
    import * as UserService from 'services/UserService';
    import { userViewContainerStyles, userViewStatusStyles } from './styles';
    import { View, Text, Button, AsyncStorage, StatusBar } from 'react-native';
    import { Profile,  UserItemList } from 'components/organisms';
    import { GDStatusBar } from '../../atoms/StatusBar';

    const logStuff = async (state, props) => console.log('state: ', state, 'props: ', props, 'async: ', AsyncStorage && await AsyncStorage.getItem('@MYAPP:userInfo'), 'object: ', await AsyncStorage.getAllKeys())

    const setStateFromGraphQL = async () => {
        const userId = AsyncStorage && await AsyncStorage.getItem('@MYAPP:userInfo')
        return { 
            user: await UserService.GetUser(userId),
            userPosts: await UserService.GetUserPosts(userId),
            userWishlist: await UserService.GetUserWishlist(userId),
            userBookmarks: await UserService.GetUserBookmarks(userId),
            userFriends: await UserService.GetUserFriends(userId),
            userFriendsRequested: await UserService.GetUserFriendRequested(userId),
            userFriendsPending: await UserService.GetUserFriendsPending(userId),
            userData: userId
        }
    }

    export default UserView = (props) => {
        const [state, setState] = useState({})
        const [loading, setLoading] = useState(true)
        useEffect (
            () => {
                const graphQLResponse = setStateFromGraphQL(); 
                setState(graphQLResponse)
                setLoading(false); 
            }, []
        )

        return <View style={userViewContainerStyles}>
            <GDStatusBar />
             {!loading && <Profile details = { state }>
                <Text>Children</Text>
            </Profile>}
            {!loading && <Button onPress={async () => await logStuff(state, props)} title="click me"/>}
            {<Button onPress={() => props.AuthUtils.logout()} title="Log Out"/>}       
        </View>
    }

Спасибо за вашу помощь

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...