Значение массива состояний не устанавливается в render в реагировать - PullRequest
0 голосов
/ 18 января 2019

Я пытаюсь отобразить несколько флажков на основе данных массива, полученных с сервера. Вот как я объявил мою переменную состояния

 this.state = {
           isLoading: true,
           checkBoxes: []
        };

//This is how I set value in componentDidMount

componentDidMount() {
    console.log("Data from JSON = " + JSON.stringify(this.props.dataSource[GLOBAL.JSONKEYS.OPTIONS]));

this.setState({
        checkBoxes: JSON.stringify(this.props.dataSource[GLOBAL.JSONKEYS.OPTIONS]),
        isLoading: false
      });
}


 render() {
    if (this.state.isLoading) {
      return (
        <View style={styles.activityStyle}>
          <ActivityIndicator size="large" />
        </View>
      );
    }

    console.log("checkboxArray in render = " + this.state.checkBoxes);

   ... code to render view

}

Ниже приведен итоговый журнал на консоли

Данные из JSON = [{ "ID": 1, "значение": "Категория1", "IsChecked" ложь}, { "идентификатор": 2, "значение": "Категория2", "IsChecked" ложь}, { "идентификатор": 3, "значение": "Category3", "IsChecked" ложь}, { "идентификатор": 4, "значение": "Другой", "IsChecked" ложь}]

checkboxArray in render =

Как вы видите, несмотря на то, что я получаю данные в componentDidMount, checkboxArray в методе рендеринга все еще кажется нулевым. Похоже, его значение не устанавливается. Я что-то здесь не так делаю? Любая помощь приветствуется.

1 Ответ

0 голосов
/ 18 января 2019

Вам необходимо получить значение isChecked из данных, собрать их и установить их в свой componentDidMount.

    const checkBoxes = [];
    const data = this.props.dataSource[GLOBAL.JSONKEYS.OPTIONS];
    data.map((item) => {
        checkBoxes.push(item.isChecked);
    });

    this.setState({
        checkBoxes,
        isLoading: false
    });
...