Appearance
useDevicesList
Reactive enumerateDevices listing available input/output devices
Demo
Usage
tsx
import { useDevicesList } from '@reause/core'
const {
devices,
videoInputs: cameras,
audioInputs: microphones,
audioOutputs: speakers,
} = useDevicesList()Requesting Permissions
To request permissions, use the ensurePermissions method.
tsx
import { useDevicesList } from '@reause/core'
const {
ensurePermissions,
permissionGranted,
} = useDevicesList()
await ensurePermissions()
console.log(permissionGranted)Call it from an event handler or an effect — never from render:
tsx
function Component() {
const { ensurePermissions, permissionGranted } = useDevicesList()
return (
<button type="button" onClick={() => void ensurePermissions()}>
{permissionGranted ? 'Granted' : 'Request permissions'}
</button>
)
}Type Declarations
ts
export interface UseDevicesListOptions extends ConfigurableNavigator {
onUpdated?: (devices: MediaDeviceInfo[]) => void;
requestPermissions?: boolean;
constraints?: MediaStreamConstraints;
}
export interface UseDevicesListReturn {
devices: MediaDeviceInfo[];
videoInputs: MediaDeviceInfo[];
audioInputs: MediaDeviceInfo[];
audioOutputs: MediaDeviceInfo[];
isSupported: boolean;
permissionGranted: boolean;
ensurePermissions: () => Promise<boolean>;
onUpdated: (fn: (devices: MediaDeviceInfo[]) => void) => () => void;
}
export interface ConfigurableNavigator {
navigator?: Navigator;
}
export interface UseUserMediaOptions extends ConfigurableNavigator {
enabled?: boolean;
autoSwitch?: boolean;
constraints?: MediaStreamConstraints;
}
export function useDevicesList(options?: UseDevicesListOptions): UseDevicesListReturn