Как я могу добавить новые слои в OlMap после его создания - PullRequest
0 голосов
/ 04 марта 2020

Я строю карту внутри constructor моего класса, что-то вроде этого:

constructor(props) {
    super(props);

    this.mapDivId = `map-${Math.random()}`;

    const baseLayer = new OlLayerTile({
        name: 'OSM',
        source: new OlSourceOSM()
    })

    this.map = new OlMap({
        //Assign Layers
        layers: [        
            baseLayer,            
        ],    
        view: new OlView({        
            center: fromLonLat(VIEW_CENTER),
            zoom: ZOOM,
        })
    });
}

Теперь все работает отлично, я могу добавить любой слой, какой захочу, когда я в конструкторе, теперь здесь это проблема, я хочу пропустить новые слои через подпорки моего класса (когда вызывается какой-то API) примерно так:

<Map layers={layers}/> 

И я хочу, чтобы эти слои были назначены на карту! но независимо от того, что я делаю, я терплю неудачу, вот пару вещей, которые я попробовал:

componentDidUpdate(prevProps, prevState) {
        if (!JavascriptUtils.isArrayEquel(prevState.layers, this.props.layers)) {
            //solution 1: 
            (this.props.layers || []).forEach(layer => {
                this.map.addLayer(layer)
            })
            //solution 2:
            // this.map.layers = [
            //     this.state.baseLayer,
            //     ...(this.props.layers || [])
            // ]

            this.setState({ layers: this.props.layers })
        }
    }  

Как я могу справиться с добавлением новых слоев на мою карту?, Я просто хочу, чтобы слой карты был изменяются всякий раз, когда изменяется слой реквизита

...