Blame view

天文台pc/tianwentai-ui/node_modules/react-dnd/src/hooks/useMonitorOutput.ts 799 Bytes
bc518174   王天杨   提交两个项目文件
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
  import type { HandlerManager, MonitorEventEmitter } from '../types/index.js'
  import { useCollector } from './useCollector.js'
  import { useIsomorphicLayoutEffect } from './useIsomorphicLayoutEffect.js'
  
  export function useMonitorOutput<Monitor extends HandlerManager, Collected>(
  	monitor: Monitor & MonitorEventEmitter,
  	collect: (monitor: Monitor) => Collected,
  	onCollect?: () => void,
  ): Collected {
  	const [collected, updateCollected] = useCollector(monitor, collect, onCollect)
  
  	useIsomorphicLayoutEffect(
  		function subscribeToMonitorStateChange() {
  			const handlerId = monitor.getHandlerId()
  			if (handlerId == null) {
  				return
  			}
  			return monitor.subscribeToStateChange(updateCollected, {
  				handlerIds: [handlerId],
  			})
  		},
  		[monitor, updateCollected],
  	)
  
  	return collected
  }