setState в объекте вложенного массива для данных SectionList по индексу - PullRequest
0 голосов
/ 13 января 2020

Я пытаюсь заполнить SectionList данными из базы данных SQLite.

Я начинаю здесь:

  constructor(props) {
    super(props);
      this.state = {
        loading: true,
        sectionListData: [
          {
            title: 'A Bulls',
            data: []
          },
          {
            title: 'H Bulls',
            data: []
          },
          {
            title: 'C Bulls',
            data: []
          },
          {
            title: 'R Bulls',
            data: []
          }
        ]
      };
    }

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

componentDidMount() {
    this.aBulls();
    this.cBulls();
    this.hBulls();
    this.rBulls();
}

Каждая из функций построена одинаково, выбирая данные из соответствующей базы данных:

aBulls() {
  db.transaction(
    tx => {
    //SQL Statement
        tx.executeSql("select * from abulls group by reg",
    //Arguments
        [],
    //Success
        (tx, { rows: {_array} }) => {
          const handlebull = JSON.stringify(_array);
          const bulls = JSON.parse(handlebull);
          this.setState({sectionListData: [
            {
              0: 
                {
                  data: bulls
                }
            }
          ]
          });
          this.setState({loading: false});
        },
    //Error
        (error) => {console.log(error)}        
          );
      }
  )};

console.log ( быки) вернет массив данных, как и ожидалось. console.log (this.state.sectionListData [0] .data) вернет значение «неопределенное». Я не могу заставить его обновить индекс вложенного массива для SectionList.

1 Ответ

0 голосов
/ 13 января 2020

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

aBulls() {
  db.transaction(
    tx => {
    //SQL Statement
        tx.executeSql("select * from abulls group by reg",
    //Arguments
        [],
    //Success
        (tx, { rows: {_array} }) => {
          const handlebull = JSON.stringify(_array);
          const bulls = JSON.parse(handlebull);
          let sectionListData = this.state.sectionListData;
          sectionListData[0].data = bulls;
          this.setState({sectionListData, loading: false});
        },
    //Error
        (error) => {console.log(error)}        
          );
      }
  )};
...