alex3165 / react-mapbox-gl

A React binding of mapbox-gl-js
http://alex3165.github.io/react-mapbox-gl/
MIT License
1.93k stars 536 forks source link

Layers do not renderer #1016

Open flannerybh opened 2 years ago

flannerybh commented 2 years ago

When a map has a layer something like this:

<Layer type="symbol" id="marker" layout={{ 'icon-image': 'school-15' }}>

<Feature coordinates={[-98.978340, 42.539770]} />

</Layer>

The layer does not render, this is because commit 4926e492cef3a77e57a8cdf7594e9340d499392e changed layer.ts's UNSAFE_componentWillMount to componentDidMount. With that change, render is called before initialize. Since on the initial render, the source is not defined, source.setData(...) is not called.

If something else triggers a render, like calling setState({}), the layer will pop in.

Suggested Fix

I think creating a constructor for the Layer class and calling this.initialize() in the constructor (rather than in componentDidMount will fix this issue.

emlyn-h commented 1 year ago

This seems like a pretty big issue. Does that mean you currently can't use this lib to show data?

flannerybh commented 1 year ago

I got around this by adding setState({}) on a short timer as I mentioned in the issue. Not ideal, but it works. I just wanted to document the issue.