2016-05-19 3 views
3

Его общая проблема, React Native пытается отобразить до того, как значения были получены из AsyncStorage. Я видел решения для этого в нескольких местах, но по какой-то причине это просто не работает для меня. Может быть, потому что я использую React Native 25.1? Он просто застрял на «Загрузка ...» на неопределенный срок. Если я запускаю консольный журнал на рендеринг, чтобы показать isLoading (без метода if), он возвращает false, а затем true, поэтому теоретически он должен работать. Но с помощью метода if он застрял на «Загрузка» навсегда, а также журнал только возвращает false.Реагировать Собственный ожидание AsyncStorage для получения значения

import React, { Component } from 'react'; 

import { 
    Text, 
    View, 
    AsyncStorage 
} from 'react-native'; 

    class MainPage extends Component { 
    constructor(props: Object): void { 
    super(); 
    this.state = { 
    isLoading: false, 
    }; 
} 

    componentWillMount() { 
    AsyncStorage.getItem('accessToken').then((token) => { 
     this.setState({ 
     isLoading: false 
     }); 
    }); 
    } 

    render() { 
    if (this.state.isLoading) { 
     return <View><Text>Loading...</Text></View>; 
    } 
    // this is the content you want to show after the promise has resolved 
    return <View/>; 
    } 

}); 
+0

Пробовали ли вы поставить код в 'componentDidMount'? – zavtra

ответ

4

Эй попробовать это ...

import React, { Component } from 'react'; 

import { 
    Text, 
    View, 
    AsyncStorage 
} from 'react-native'; 

class MainPage extends Component { 

    constructor(props: Object): void { 
     super(props); 
     this.state = { 
     isLoading: false, 
     }; 
    } 

    componentWillMount() { 
    AsyncStorage.getItem('accessToken').then((token) => { 
     this.setState({ 
     isLoading: false 
     }); 
    }); 
    } 

    render() { 
    if (this.state.isLoading) { 
     return <View><Text>Loading...</Text></View>; 
    } 
    // this is the content you want to show after the promise has resolved 
    return <View/>; 
    } 
} 

Позвольте мне знать, если вам нужно больше уточнений ...

+0

Ок, вы, похоже, только что скорректировали мою опечатку, то есть оставив «var component = React.createClass ({« случайно). Очевидно, что это не проблема или она сразу же выведет ошибку, это не покажет «Загрузка» 'screen в первую очередь, не забудьте слишком долго. Если в коде нет чего-то еще, но насколько я могу видеть его идентичность, кроме удаления опечатки? – Hasen

+0

Эй, тот же код и реагирующий нативный 0.25.1 работает для меня здесь, в моей системе. – Jickson

+0

Я получаю это предупреждение: может обновлять только смонтированный или монтируемый компонент. Обычно это означает, что вы вызывали setState, replaceState или forceUpdate на незамонтированном компоненте. Это no-op. @jickson –