@@ -13,6 +13,7 @@ import {
1313import deletionRegistry from '../utils/DeletionRegistry' ;
1414import useDebounce from '../utils/useDebounce' ;
1515import useGetterRef from '../utils/useGetterRef' ;
16+ import { useIsMounted } from '../utils/useIsMounted' ;
1617import useMount from '../utils/useMount' ;
1718import useUnmount from '../utils/useUnmount' ;
1819import {
@@ -136,6 +137,8 @@ export default forwardRef(function ViewPicking(props: PickingProps, fwdRef) {
136137 } ;
137138 } ) ;
138139
140+ const isMounted = useIsMounted ( ) ;
141+
139142 // --- Props --- //
140143
141144 const {
@@ -152,6 +155,8 @@ export default forwardRef(function ViewPicking(props: PickingProps, fwdRef) {
152155
153156 const pickClosest = useCallback (
154157 ( xp : number , yp : number , tolerance : number ) : PickResult [ ] => {
158+ if ( ! isMounted . current ) return [ ] ;
159+
155160 const x1 = Math . floor ( xp - tolerance ) ;
156161 const y1 = Math . floor ( yp - tolerance ) ;
157162 const x2 = Math . ceil ( xp + tolerance ) ;
@@ -218,11 +223,13 @@ export default forwardRef(function ViewPicking(props: PickingProps, fwdRef) {
218223 } ,
219224 ] as PickResult [ ] ;
220225 } ,
221- [ rendererAPI , openGLRenderWindowAPI , getSelector ]
226+ [ rendererAPI , openGLRenderWindowAPI , isMounted , getSelector ]
222227 ) ;
223228
224229 const pick = useCallback (
225230 ( x1 : number , y1 : number , x2 : number , y2 : number ) : PickResult [ ] => {
231+ if ( ! isMounted . current ) return [ ] ;
232+
226233 const selector = getSelector ( ) ;
227234 const openGLRenderWindow = openGLRenderWindowAPI . get ( ) ;
228235 const renderer = rendererAPI . get ( ) ;
@@ -277,7 +284,7 @@ export default forwardRef(function ViewPicking(props: PickingProps, fwdRef) {
277284 } )
278285 . filter ( Boolean ) as PickResult [ ] ;
279286 } ,
280- [ rendererAPI , openGLRenderWindowAPI , getSelector ]
287+ [ rendererAPI , openGLRenderWindowAPI , isMounted , getSelector ]
281288 ) ;
282289
283290 const pickWithFrustum = useCallback (
@@ -287,6 +294,8 @@ export default forwardRef(function ViewPicking(props: PickingProps, fwdRef) {
287294 x2 : number ,
288295 y2 : number
289296 ) : FrustumPickResult | null => {
297+ if ( ! isMounted . current ) return null ;
298+
290299 const selector = getSelector ( ) ;
291300 const openGLRenderWindow = openGLRenderWindowAPI . get ( ) ;
292301 const renderer = rendererAPI . get ( ) ;
@@ -324,7 +333,7 @@ export default forwardRef(function ViewPicking(props: PickingProps, fwdRef) {
324333 } ) ;
325334 return { frustum, representationIds } ;
326335 } ,
327- [ rendererAPI , openGLRenderWindowAPI , getSelector ]
336+ [ rendererAPI , openGLRenderWindowAPI , isMounted , getSelector ]
328337 ) ;
329338
330339 const api = useMemo (
0 commit comments