|
1 | 1 | import * as React from 'react'; |
2 | | -import {useContext, useEffect, useMemo, useCallback, useState, useRef, cloneElement} from 'react'; |
| 2 | +import {useContext, useEffect, useMemo, useState, useRef, cloneElement} from 'react'; |
3 | 3 | import {MapContext} from './map'; |
4 | 4 | import assert from '../utils/assert'; |
5 | 5 | import {deepEqual} from '../utils/deep-equal'; |
@@ -83,16 +83,17 @@ export function Source(props: SourceProps) { |
83 | 83 | const [, setStyleLoaded] = useState(0); |
84 | 84 |
|
85 | 85 | const id = useMemo(() => props.id || `jsx-source-${sourceCounter++}`, []); |
86 | | - const forceUpdate = useCallback(() => setStyleLoaded(version => version + 1), []); |
87 | 86 |
|
88 | 87 | useEffect(() => { |
89 | 88 | if (map) { |
90 | | - // Fired on initial load signaling the map is ready to add custom sources |
91 | | - // Subsequently fired on style changes |
| 89 | + /* global setTimeout */ |
| 90 | + const forceUpdate = () => setTimeout(() => setStyleLoaded(version => version + 1), 0); |
| 91 | + map.on('load', forceUpdate); |
92 | 92 | map.on('styledata', forceUpdate); |
93 | 93 | forceUpdate(); |
94 | 94 |
|
95 | 95 | return () => { |
| 96 | + map.off('load', forceUpdate); |
96 | 97 | map.off('styledata', forceUpdate); |
97 | 98 | // @ts-ignore |
98 | 99 | if (map.style && map.style._loaded && map.getSource(id)) { |
@@ -124,20 +125,6 @@ export function Source(props: SourceProps) { |
124 | 125 | } |
125 | 126 | propsRef.current = props; |
126 | 127 |
|
127 | | - useEffect(() => { |
128 | | - if (!source) { |
129 | | - // on `styledata` event, `map.isStyleLoaded()` still returns false. |
130 | | - // `load` and `style.load` only fire once and not when `isStyleLoaded` changes from true to false to true. |
131 | | - // `sourcedata` potentially suggests that `isStyleLoaded` has changed. But it fires on every tile load. |
132 | | - // Unsubscribe once source is added. |
133 | | - map.on('sourcedata', forceUpdate); |
134 | | - return () => { |
135 | | - map.off('sourcedata', forceUpdate); |
136 | | - }; |
137 | | - } |
138 | | - return undefined; |
139 | | - }, [map, source]); |
140 | | - |
141 | 128 | return ( |
142 | 129 | (source && |
143 | 130 | React.Children.map( |
|
0 commit comments