Получите данные из государственного реактивного Javascript - PullRequest
0 голосов
/ 22 сентября 2018

Меня удивляет, почему я не могу получить данные из штата, я перепробовал много вещей, но не повезло.

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

Любые предложения будут оценены.

Спасибо

state = {
   isDateTimePickerVisible: false,
   mode: "time",
   minuteInterval: 30,
   selectedDate: {},
   isLoading: true,
   syllabus: [{value: 'Banana'}],
   users: [{
     value: 'Banana',
     app_id: 'apple',
   }],
  timeSlots:[{
     name: 'test',
     time: '123',
  }],
};

testStore() {

let returnArr = [];

  db.ref('bookings/' + this.user).child("22-09-2018").once('value').then(function(snapshot) {
     let data = snapshot.val();
     let timeSlot = Object.values(data);
     console.log("testStore: " + timeSlot[0].name);
     //gets data from the firebase database -- testStore: james
     dt = timeSlot;

     this.setState({
       timeSlots: dt
     });

}.bind(this));
  this.testState();
}

testState() {
  console.log("test state " + this.state.timeSlots[0].name);
  //Get A red screen with error undefined is not an object(evaluating 'this.state.timeSlots['name']) 
}

    onDayPress(day) {

        console.log("day press " + day.dateString);
        this.testStore();
        var st = day.dateString;
        var dt = new Date(st);

        var today = dt;
        var dd = today.getDate();
        var mm = today.getMonth() + 1; //January is 0!

        var yyyy = today.getFullYear();
        if (dd < 10) {
            dd = '0' + dd;
        }
        if (mm < 10) {
            mm = '0' + mm;
        }
        var today = dd + '-' + mm + '-' + yyyy;

        console.log("date is " + today);

        this.setState({
            selectedDate: today
        });

    }

1 Ответ

0 голосов
/ 28 сентября 2018

Из вашего полного кода кажется, что ваш конструктор переписывает ваше состояние в пустой объект (поэтому this.state.timeSlots[0].name действительно проблематично)

Я бы переписал ваш конструктор как:

constructor(props) {
    super(props)
    this.state = {
      isDateTimePickerVisible: false,
      mode: 'time',
      minuteInterval: 30,
      selectedDate: {},
      isLoading: true,

      syllabus: [{
        value: 'Banana',
      }],
      users: [{
        value: 'Banana',
        app_id: 'apple',
      }],

      slots: [{
        name: 'test',
        time: '123',
        user_id: '373737',
      }],
    }
this.onDayPress = this.onDayPress.bind(this)
this.testStore = this.testStore.bind(this)

}

и testStore as:

testStore() {
      const returnArr = []

      db.ref(`bookings/${this.user}`).child('22-09-2018').once('value').then((snapshot) => {
        const data = snapshot.val()
        const timeSlot = Object.values(data)

        console.log(`testStore: ${timeSlot[0].name}`)

        dt = timeSlot

        this.setState({
            timeSlots: dt
        }, () => {
            console.log('after setState', this.state.timeSlots)
        })
      })
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...