Динамические имена для setState в реагировать - PullRequest
0 голосов
/ 15 января 2019
 constructor(props){
    super(props);

this.state = {
  services:
    [
        {
            "name": "",
            "icon": require('./home-icon1.png')
        },
        {
            "name": "",
            "icon": require('./home-icon2.png')
        },
        {
            "name": "",
            "icon": require('./home-icon3.png')
        },
        {
            "name": "",
            "icon": require('./home-icon4.png')
        },

      ]
};


}
componentWillMount(){
               fetch('link.com', {
                method: 'GET',

              }).then((response) => response.json())
                    .then((responseJson) => {

                    if(responseJson.message === "List of Services"){
                      var length = responseJson.result.length.toString();
                      ToastAndroid.show(responseJson.message, ToastAndroid.LONG);
                      for(var i = 0 ; i < length ; i++){

                        const services = [...this.state.services];
                        services[i].name =  responseJson.result[i].Service.service_name
                        this.setState({ services : services });
                        //this.setState({[services[i].name] : responseJson.result[0].Service.service_name})
                      }
                       Alert.alert(services.length);
                    }
                    else{
                      Alert.alert("Cant Connect toSErber");
                    }


                    }).catch((error) => {
                      console.error(error);
                    });

}

По сути, я пытаюсь получить некоторые данные с сервера, а затем, используя эти данные, я меняю состояние служб, которое является состоянием компонента. Но синтаксис, который я использую для setState для служб, неверен. Как можно я правильно установил состояние служб после получения данных с сервера

1 Ответ

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

вы переусердствовали в этом. попробуйте это:

  1. установить this.state.services в пустой массив = [];
  2. когда вы выбираете данные, сделайте следующее:

    const services = [... this.state.services]; const serviceData = responseJson.result;

    serviceData.map ((service, index) => { services [index] ['name'] = service.Service.service_name; services [index] ['icon'] = iconComponent; });

    this.setState ({services});

...