README.md

April 1, 2025View on GitHub

馃寳 react-screen-wake-lock

Tiniest React implementation of the Screen Wake Lock API.
It provides a way to prevent devices from dimming or locking the screen when an application needs to keep running.


Demo Documentation Twitter Created by Joris

Features

  • 馃寪 Follows the W3C Screen Wake Lock API specifications
  • 馃獫 Easy to use - Just one react hook useWakeLock
  • 馃 Lightweight & 0 Dependency - Less than 650b
  • 馃攲 Easily integration - It works without additional configuration (React, remix, Next.js...)
  • 馃И Ready to test - Mocks the Screen Wake Lock with Jest
  • 鈿狅笍 Browser Support - Screen Wake Lock API
react-screen-wake-lock use native Screen Wake Lock API under the hood which is not supported by all browsers. Data on support for the wake-lock feature across the major browsers from caniuse.com

Examples (Demo)

Installation

yarn add react-screen-wake-lock

or

npm i react-screen-wake-lock

Usage

import { useWakeLock } from 'react-screen-wake-lock';

function Component() {
  const { isSupported, released, request, release } = useWakeLock({
    onRequest: () => alert('Screen Wake Lock: requested!'),
    onError: () => alert('An error happened 馃挜'),
    onRelease: () => alert('Screen Wake Lock: released!'),
    reacquireOnPageVisible: true,
  });

  return (
    <div>
      <p>
        Screen Wake Lock API supported: <b>{`${isSupported}`}</b>
        <br />
        Released: <b>{`${released}`}</b>
      </p>
      <button type="button" onClick={() => (released === false ? release() : request())}>
        {released === false ? 'Release' : 'Request'}
      </button>
    </div>
  );
}

export default Component;

Props

Propdescriptiondefaultrequired
onRequestcalled on successfully navigator.wakeLock.requestundefinedfalse
onErrorcalled when caught an error from navigator.wakeLock.requestundefinedfalse
onReleasecalled when wake lock is releasedundefinedfalse
reacquireOnPageVisibleReacquires the wake lock when the page becomes visible againfalsefalse

Returns

Propdescriptiontype
isSupportedBrowser support for the Screen Wake Lock APIboolean
releasedOnce WakeLock is released, released become true and the value never changes againbooleanundefined
requestReturns a promise which allows control over screen dimming and lockingfunction
releaseReturns a promise that is resolved once the sentinel has been successfully releasedfunction

Testing

To write tests with ease, follow this guide

Author

馃寛 Joris@_jorisre