Как отобразить текущий URL для получения и что происходит с моим государством? - PullRequest
1 голос
/ 08 ноября 2019

У меня есть приложение React Native, которое подключено к PostgresDB через ExpressJS. У меня есть вызов выборки, который содержит URL с двумя параметрами, один из которых изменяется с помощью setState.

Есть ли способ, которым я могу показать (console.log) текущий URL выборки внутри моего приложения, когда оноработает?

`http://myip/api/hours/daydata/${realDate}/${userid}`

realDate изменяется нажатием кнопки this.setState.

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

Например, я вижу данные за 10.10.2019. Когда я нажимаю кнопку «Назад», дата меняется внутри календаря, но данные остаются (данные от 10.10.2019) - когда я нажимаю кнопку еще раз, я должен увидеть данные от 08.10.2019, но я получаю данные от 09.10.2019 (1). выходной).

Одна вещь, которую я заметил, заключается в том, что кнопки не отображаются при первом нажатии, но выбор даты непосредственно в календаре действительно все меняет правильно. Здесь вы можете увидеть 2 разных звонка, может быть, вы видите, что может быть не так.

  dateBackHandler = () => {
    console.log("Current Date FIRST :", this.state.date); // Here I get the date from today

    const newDate = Moment(this.state.date)
      .subtract(1, "d")
      .format("YYYY-MM-DD");

    console.log("NEW DATE BEFORE SETSTATE & FETCHDATA " + newDate);
 // newDate gives me yesterdays date which is correct

    this.setState({ date: newDate }); // I am setting newDate to be the date

    console.log("Current Date SECOND After setState : ", this.state.date); 
// this log should now be yesterdays date because I changed it but somehow this date is todaysdate again

    this.fetchData(); // in here is the fetchcall that should work with yesterdays date.
  };

Внутри моего календаря (datetimepicker) вызов setState работает так:

onDateChange={date => {
              this.setState({ date: date });
              this.fetchData();
            }}

Спасибо.

1 Ответ

2 голосов
/ 08 ноября 2019

setState является асинхронной функцией. Таким образом, вы должны выполнить зависимую функцию в функции callback.

onDateChange={date => {
    this.setState({ date: date }, () => {
       this.fetchData();
    });              
}}

Здесь - лучшее понимание state и setState с примером.

...