AsyncStorage асинхронный, и я не могу делать то, что хочу

Я новичок в React Native, и я столкнулся с проблемой, которая заняла у меня более 3 дней ^_^

Я использую " AsyncStorage " в componentDidMount, но он использует значение инициализации, потому что асинхронный процесс все еще не возвращает значение

var data = {foo:this.state.parmstudentid};
fetch(`http://****:82/wasily/MyDealOffer.php?UserID=${data.foo}`, 

когда помещается URL-адрес "http://****:82/wasily/MyDealOffer.php?UserID=4", он возвращает правильный список, но когда я использую ${data.foo}, он не возвращает список, потому что он отправка «0» в API (значение по умолчанию при создании состояния)

AsyncStorage.getItem("UserID").then((value) => {
this.setState({parmstudentid: value});
}).done(()=>{
this.setState({AsyncResult:true})
})

я использовал этот код, чтобы получить новое значение для моего состояния parmstudentid

как я могу остановить выполнение всего кода до запуска AsyncStorage


person fahi    schedule 01.11.2017    source источник


Ответы (1)


Вы, наверное, хотите что-то вроде этого, верно?

AsyncStorage
  .getItem("UserId")
  .then( val => {
    this.setState({ parmstudentid: val });
    fetch(`http://****:82/wasily/MyDealOffer.php?UserID=${val}`)
    // etc
  })

Часть setState может даже не понадобиться, если вы просто используете значение один раз. Или, если вам нужен более сложный набор действий по загрузке, вы можете следовать этому шаблону:

export default class App extends Component {
  componentWillMount(){
    AsyncStorage
      .getItem("UserId")
      .then( val => this.setState({ parmstudentid: val, loading: false }) );
  }

  componentWillUpdate(props, state){
    if(!state.loading){
      // make your callout here
    }
  }

  render() {
    return (
      <View />
    );
  }
}
person Doug Friedman    schedule 01.11.2017