2017-02-21 15 views
0

У меня есть файл App.js, и это корень моего приложения (как iOS, так и ссылка на него для Android).
У меня есть значение, которое я сохраняю в AsyncStorage, что мне нужно до app.js Вызывается метод render.
Проблема в том, что, поскольку это async, это поздно, и я не могу получить это значение.Что лучше всего получить от AsyncStorage до загрузки всего приложения

class App extends React.Component { 
    constructor(props) { 
    super(props); 
    this.init() 
    } 
    async init() { 
    try { 
    const value = await AsyncStorage.getItem('@myPoorValue:key'); 
    if (value !== null){ 
    ... 
    } 
} catch (error) {} 
    } 
} 
... 
render (... 

Я надеюсь, что я хорошо объяснил, в чем моя проблема.
Я знаю, что нет возможности получить синхронный (я бы хотел), но не знаю, что делать в этой ситуации.
Чтобы объяснить это немного лучше, я использую I18n, и я вручную установил I18n.locale в какое-то значение, а другие компоненты получают значение по умолчанию, прежде чем устанавливать его вручную.
Просто, чтобы отметить, я также использую redux, и я передаю ему выбранное значение.

+0

Я думаю, у вас может быть appNavigator.js? – Codesingh

ответ

1

попробуйте следующее:

... 
 

 
constructor(props) { 
 
    super(props) 
 
    
 
    this state = { 
 
    isLoading: true 
 
    } 
 
} 
 
    
 
async componentDidMount() { 
 
    await this.init() 
 
    
 
    // you might want to do the I18N setup here 
 
    this.setState({ 
 
    isLoading: false 
 
    }) 
 
} 
 

 
async init() { 
 
    const value = await AsyncStorage.getItem('@myPoorValue:key') 
 
    ... 
 
} 
 

 
...

вещь, что init() возвращает обещание, и вы должны ждать, пока она не получает решена. Вот когда await приходит на помощь.

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

 Смежные вопросы

  • Нет связанных вопросов^_^