Web API's turned into React Hooks and Suspense-friendly React components. #useThePlatform
Note: React 16.8+ is required for Hooks.
npm i the-platform --save
Detect and retrieve current device Motion.
import { useDeviceMotion } from 'the-platform'; const Example = () => { const { acceleration, rotationRate, interval } = useDeviceMotion(); // ... };
Detect and retrieve current device orientation.
import { useDeviceOrientation } from 'the-platform'; const Example = () => { const { alpha, beta, gamma, absolute } = useDeviceOrientation(); // ... };
Retrieve Geo position from the browser. This will throw a promise (must use with Suspense).
import { useGeoPosition } from 'the-platform'; const Example = () => { const { coords: { latitude, longitude }, } = useGeoPosition(); // ... };
Retrieve network status from the browser.
Object containing:
isOnline: boolean
: true
if the browser has network access. false
otherwise.
offlineAt?: Date
: Date when network connection was lost.
import { useNetworkStatus } from 'the-platform'; const Example = () => { const { isOnline, offlineAt } = useNetworkStatus(); // ... };
query: string | object
: media query string or object (parsed by json2mq). defaultMatches: boolean
: a boolean providing a default value for matches
match: boolean
: true
if the media query matches, false
otherwise.
import { useMedia } from 'the-platform'; const Example = () => { const small = useMedia('(min-width: 400px)'); const medium = useMedia({ minWidth: 800 }); // ... };
This will throw a promise (must use with Suspense).
Object containing:
src: string
: The script's URI.import { useScript } from 'the-platform'; const Example = () => { const _unused = useScript({ src: 'bundle.js' }); // ... };
This will throw a promise (must use with Suspense).
Object containing:
href: string
: The stylesheet's URI.media?: string
: Intended destination media for style information.import { useStylesheet } from 'the-platform'; const Example = () => { const _unused = useStylesheet({ href: 'normalize.css' }); // ... };
useWindowScrollPosition()
Object containing:
x: number
: Horizontal scroll in pixels (window.pageXOffset
).y: number
: Vertical scroll in pixels (window.pageYOffset
).import { useWindowScrollPosition } from 'the-platform'; const Example = () => { const { x, y } = useWindowScrollPosition(); // ... };
Object containing:
width
: Width of browser viewport (window.innerWidth
)height
: Height of browser viewport (window.innerHeight
)import { useWindowSize } from 'the-platform'; const Example = () => { const { width, height } = useWindowSize(); // ... };
src: string
<img>
tagimport React from 'react'; import { Img } from 'the-platform'; function App() { return ( <div> <h1>Hello</h1> <React.Suspense maxDuration={300} fallback={'loading...'}> <Img src="https://source.unsplash.com/random/4000x2000" /> </React.Suspense> </div> ); } export default App;
src: string
children?: () => React.ReactNode
- This render prop will only execute after the script has loaded.<script>
tagimport React from 'react'; import { Script } from 'the-platform'; function App() { return ( <div> <h1>Load Stripe.js Async</h1> <React.Suspense maxDuration={300} fallback={'loading...'}> <Script src="https://js.stripe.com/v3/" async> {() => console.log(window.Stripe) || null} </Script> </React.Suspense> </div> ); } export default App;
src: string
<video>
tagimport React from 'react'; import { Video } from 'the-platform'; function App() { return ( <div> <h1>Ken Wheeler on a Scooter</h1> <React.Suspense maxDuration={300} fallback={'loading...'}> <Video src="https://video.twimg.com/ext_tw_video/1029780437437014016/pu/vid/360x640/QLNTqYaYtkx9AbeH.mp4?tag=5" preload="auto" autoPlay /> </React.Suspense> </div> ); } export default App;
src: string
<audio>
tagimport React from 'react'; import { Audio } from 'the-platform'; function App() { return ( <div> <h1>Meavy Boy - Compassion</h1> {/* source: http://freemusicarchive.org/music/Meavy_Boy/EP_71_to_20/Compassion */} <React.Suspense maxDuration={300} fallback={'loading...'}> <Audio src="https://file-dnzavydoqu.now.sh/" preload="auto" autoPlay /> </React.Suspense> </div> ); } export default App;
Preload a resource with <link rel="preload">
. For more information check out MDN or the Google Developer Blog.
href: string
as: string
- resource typeimport React from 'react'; import { Preload, Script } from 'the-platform'; function App() { return ( <div> <h1>Preload</h1> <React.Suspense maxDuration={300} fallback={'loading...'}> <Preload href="https://js.stripe.com/v3/" rel="preload" as="script" /> <Script src="https://js.stripe.com/v3/" async /> </React.Suspense> </div> ); } export default App;
Lazy load a stylesheet.
href: string
import React from 'react'; import { Stylesheet } from 'the-platform'; function App() { return ( <div> <h1>Styles</h1> <React.Suspense maxDuration={300} fallback={'loading...'}> <Stylesheet href="style.css" /> </React.Suspense> </div> ); } export default App;
MIT License
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4