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 --saveyarn add the-platformDetect 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:trueif the browser has network access.falseotherwise. -
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' });
// ...
};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- anything else you can pass to an
<img>tag
import 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: stringchildren?: () => React.ReactNode- This render prop will only execute after the script has loaded.- anything else you can pass to a
<script>tag
import 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- anything else you can pass to a
<video>tag
import 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- anything else you can pass to a
<audio>tag
import 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: stringas: string- resource type
import 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;- react-fns
- AOL.
MIT License
