Leaflet JS: Невозможно прочитать свойство addLayer из undefined при отображении drawItems на карте - PullRequest
1 голос
/ 23 января 2020

Я попытался отобразить буклет «Карта», на котором изображены многоугольные поверхности. Иногда это показывает, что ошибка не может прочитать свойство 'addLayer' неопределенного, когда страница обновляется, карта отображается правильно. Я не знаю, где я сделал неправильно, пожалуйста, наведите меня

componentDidUpdate(prevProps, prevState) {
    const { user, surfaces } = this.props;
    const { allLayers } = this.state;
    const that = this;
    let selectedSurface = null;

   if (!prevProps.user.id && user.id) {
     this.initializeMap();
   }


  if (allLayers.length === 1 && surfaces.length > 1) {
    let allLayers = [{ key: -1, name: this.props.intl.formatMessage({ id: 
      'surface.allsurfaces' }), color: '#CCCCCC' }];
    surfaces.forEach((o) => {
     let l = new L.geoJSON(o.geometry)._layers;
     [l] = Object.keys(l).map(ob => l[ob]);
     const customlayer = this.addPopupToLayer(o, l);
     drawnItems[o.surface_type.id].addLayer(customlayer);
     l.on('click', (e) => {
       if (selectedSurface) {
         selectedSurface.editing.disable();
       }
       selectedSurface = e.target;
       e.target.editing.enable();

       that.setState({
         popup: true,
         detail: true,
         surfaceDetail: o,
         typeSelected: o.surface_type,
         editSurface: selectedSurface
       });
     });

     allLayers.push({
       key: o.surface_type.id,
       name: o.surface_type.name,
       color: o.surface_type.color
      });
    });
    allLayers = allLayers.filter(
     (l, index, self) => self.findIndex(
       t => t.key === l.key
     ) === index
    );
    this.setState({
     allLayers,
     counter: surfaces.length
    });
  }
}

1 Ответ

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

После устранения проблемы о том, почему она вызывает проблему для refre sh, т. Е. Map не получает значения props во время drawItems. Итак, я написал условие, что после получения значений prop я попытался добавить addLayer. Теперь он работает нормально. Надеюсь, это кому-нибудь поможет

...