реагировать на асинхронный сбор данных при первом запуске приложения - PullRequest
0 голосов
/ 07 июня 2019

У меня есть два компонента: в первых компонентах, хранящих данные в asyncstorage, во втором компоненте отображаются данные, когда приложение установки и сохранения данных не получает данные из asyncstorage, когда отображаются данные второго раза открытого приложения.

storeData = async (item, messave, messrem) => {
    const checkarary = this.state.favorite;
    if(checkarary.some(e => e.name === item.name)) {
        const value = this.state.favorite;
        const position = value.filter((lists) => lists.id !== item.id);
        this.setState({
            favorite: position
        }, () => {
            try {
                AsyncStorage.setItem('favoriti', JSON.stringify(this.state.favorite), () => {
                    Toast.show({
                        text: messrem,
                        buttonText: "Okay",
                        duration: 3000,
                        type: "danger"
                    });                  
                });
            } catch (error) {
            }
        });    
    } else {
        this.setState({
            favorite: [...this.state.favorite, item]
        }, () => {
            try {
                AsyncStorage.setItem('favoriti', JSON.stringify(this.state.favorite), () => {
                    // AsyncStorage.getItem('favoriti', (err, result) => {
                    //     console.log(result);
                    // });
                    Toast.show({
                        text: messave,
                        buttonText: "Okay",
                        duration: 3000,
                        type: "success"
                    });
                });
            } catch (error) {
            }
        }); 

    } 
};

Получение данных во втором компоненте

 _retrieveData = async () => {
try {
  AsyncStorage.getItem('favoriti').then((value) => {
    const parsed = JSON.parse(value);
    this.setState({ favorite: parsed })
  })
} catch (error) {
}
};

componentDidMount() {
 this._retrieveData();
 setTimeout(() => {
  this.setState({
    loading: false,
  })
 }, 2000)
};

componentDidUpdate() {
   this._retrieveData();
};

Как решить эту проблему, есть ли какое-то решение. Могу ли я установить Item и перезагрузить приложение при установке приложения или чего-то еще.

1 Ответ

0 голосов
/ 08 июня 2019

Используйте это

componentWillMount() {
 this._retrieveData();
 setTimeout(() => {
  this.setState({
    loading: false,
  })
 }, 2000)
};

вместо

componentDidMount() {
 this._retrieveData();
 setTimeout(() => {
  this.setState({
    loading: false,
  })
 }, 2000)
};

Поскольку componentWillMount вызывается после вызова конструктора для класса, а componentDidMount вызывается после отображения экрана один раз.

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