setState во время componentDidMount () - PullRequest
0 голосов
/ 29 октября 2018

Я начинаю проект с реакции, чтобы улучшить свои навыки. Но в моем проекте у меня есть ошибка, когда я пытаюсь установить массив, созданный из файла json, в хуке ComponentDidMount (), я думаю, что эта ошибка произошла из-за предыдущего, который сказал:

cannot read property 0 of undefined 

Нужна ли определенная библиотека для правильного анализа файла json?

Ниже отображается последняя ошибка:

 Can't call setState (or forceUpdate) on an unmounted component.

Компонент, который имеет метод здесь:

class SimpleMap extends Component{

state={
    positions:[],
    isLoading:true
}
componentDidMount(){
    console.log(data.latlngs);
    this.switchCoord(data.latlngs);
}


switchCoord(datas){
//console.log( datas);
console.log("-----------------");
//remplacer latlngs par data pour fonctionner avec le fichier json
datas.forEach(data =>{
  let newLat;
  let newLng;
  let tableWithNewCoord =[];
  //console.log(data)
  data.forEach(d => {
      newLat = d[1];
      newLng = d[0]; 
      let switchCoordData =[newLat,newLng];
      tableWithNewCoord.push(switchCoordData);
    })
    this.setState({
      positions:[...this.state.positions,tableWithNewCoord]
    })
  })


}

Файл json импортируется из ресурсов папки и имеет следующую форму:

{
"latlngs":
    [[2.367272,48.662474],[2.36523,48.663373],
    [2.360465,48.66607],[2.3557,48.667419],
    [2.352978,48.667868],[2.348893,48.669217],
    [2.34549,48.671015],[2.342767,48.672813]...]
}

Заранее спасибо за помощь. С наилучшими пожеланиями

1 Ответ

0 голосов
/ 29 октября 2018

Я считаю, что проблема в вашей функции switchCoord. Просто вы можете попробовать эту вашу рефакторированную функцию:

switchCoord(data) //actually data should be renamed to latlngs for readability 
{
  let tableWithNewCoord = [];

  data.forEach( (coord) => {
    tableWithNewCoord.push([coord[1], coord[0]])
  });

  this.setState({positions: tableWithNewCoord});
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...