What is react-device-detect?
The react-device-detect package is a tool for detecting device types and browser environments in a React application. It provides a set of hooks and components that allow developers to render content conditionally based on the user's device type, operating system, browser, and other device-specific characteristics.
What are react-device-detect's main functionalities?
Device Type Detection
Detects the type of device (mobile, tablet, desktop) and allows you to render content conditionally based on the device type.
import { isMobile, isTablet, isDesktop } from 'react-device-detect';
function MyComponent() {
return (
<div>
{isMobile && <p>This is a mobile device.</p>}
{isTablet && <p>This is a tablet device.</p>}
{isDesktop && <p>This is a desktop device.</p>}
</div>
);
}
Browser Detection
Determines the browser being used (e.g., Chrome, Firefox) and enables conditional rendering of components or content for specific browsers.
import { isChrome, isFirefox } from 'react-device-detect';
function MyComponent() {
return (
<div>
{isChrome && <p>This is viewed in Chrome.</p>}
{isFirefox && <p>This is viewed in Firefox.</p>}
</div>
);
}
Operating System Detection
Identifies the operating system of the user's device (e.g., Android, iOS) and allows for OS-specific content or functionality.
import { isAndroid, isIOS } from 'react-device-detect';
function MyComponent() {
return (
<div>
{isAndroid && <p>This is an Android device.</p>}
{isIOS && <p>This is an iOS device.</p>}
</div>
);
}
Custom Hooks
Provides custom hooks that return an object with device detection booleans, allowing for more dynamic and custom implementations.
import { useDeviceDetect } from 'react-device-detect';
function MyComponent() {
const { isMobile, isDesktop } = useDeviceDetect();
return (
<div>
{isMobile && <p>Content for mobile</p>}
{isDesktop && <p>Content for desktop</p>}
</div>
);
}
Other packages similar to react-device-detect
mobile-detect
A package similar to react-device-detect that offers detailed mobile device detection, including phone/tablet detection, and can parse user-agent strings. It does not provide React-specific hooks or components.
ua-parser-js
This package is used for user-agent string parsing to identify browser, engine, OS, CPU, and device type/model. It is more general-purpose and not React-specific, unlike react-device-detect which provides React components and hooks.
react-responsive
A package that allows for the creation of responsive design in React applications using media queries. It is similar to react-device-detect in providing conditional rendering based on device characteristics but focuses more on responsive design rather than device detection.
react-device-detect
Detect device, and render view according to detected device type.
Installation
To install, you can use npm or yarn:
npm install react-device-detect --save
or
yarn add react-device-detect
Usage
Example:
import {
BrowserView,
MobileView,
isBrowser,
isMobile
} from "react-device-detect";
<BrowserView>
<h1> This is rendered only in browser </h1>
</BrowserView>
<MobileView>
<h1> This is rendered only on mobile </h1>
</MobileView>
if you don't need a view, you can use isMobile
for conditional rendering
import {isMobile} from 'react-device-detect';
renderContent = () => {
if (isMobile) {
return <div> This content is unavailable on mobile</div>
}
return <div> ...content </div>
}
render() {
return this.renderContent();
}
If you want to leave a message to specific browser (e.g IE), you can use isIE
selector
import {isIE} from 'react-device-detect';
render() {
if (isIE) return <div> IE is not supported. Download Chrome/Opera/Firefox </div>
return (
<div>...content</div>
)
}
If you want to render a view on specific device and with specific condition:
import { browserName, CustomView } from 'react-device-detect';
render() {
return (
<CustomView condition={browserName === "Chrome"}>
<div>...content</div>
</CustomView>
)
}
Style the view
Yoa can style view component by passing class to viewClassName
prop
<BrowserView viewClassName='custom-class'>
<p> View content </p>
</BrowserView>
or you can pass inline styles to style
prop
const styles = {
background: "red",
fontSize: "24px",
lineHeight: "2"
};
<BrowserView style={styles}>
<p> View content</p>
</BrowserView>
Selectors and views
Selectors
prop | type | description |
---|
isMobile | bool | returns true if device type is mobile or tablet |
isMobileOnly | bool | returns true if device type is mobile |
isTablet | bool | returns true if device type is tablet |
isBrowser | bool | returns true if device type is browser |
isSmartTV | bool | returns true if device type is smarttv |
isWearable | bool | returns true if device type is wearable |
isConsole | bool | returns true if device type is console |
isAndroid | bool | returns true if os type is Android |
isWinPhone | bool | returns true if os type is Windows Phone |
isIOS | bool | returns true if os type is iOS |
isChrome | bool | returns true if browser is Chrome |
isFirefox | bool | returns true if browser is Firefox |
isSafari | bool | returns true if browser is Safari |
isOpera | bool | returns true if browser is Opera |
isIE | bool | returns true if browser is Internet Explorer |
isEdge | bool | returns true if browser is Edge |
isYandex | bool | returns true if browser is Yandex |
isChromium | bool | returns true if browser is Chromium |
isMobileSafari | bool | returns true if browser is Mobile Safari |
osVersion | string | returns os version (e.g 7 for Windows or 6 for Android ) |
osName | string | returns os name (e.g Windows , Android ) |
fullBrowserVersion | string | returns full browser version (e.g 65.0.3325.181 for Chrome ) |
browserVersion | string | returns browser major version (e.g 65 in Chrome or 9 in IE ) |
browserName | string | returns browser name |
mobileVendor | string | returns mobile device vendor (e.g LG , iPhone etc) |
mobileModel | string | returns mobile device model (e.g Nexus 5 ) |
engineName | string | returns browser engine name (e.g Gecko for FF or WebKit for Chrome) |
engineVersion | string | returns engine version |
getUA | string | returns user agent |
deviceType | string | returns device type (e.g mobile or tablet ) |
isIOS13 | boolean | returns true/false if device is running on iOS13 |
isIPhone13 | boolean | returns true/false if device is iPhone and running on iOS13 |
isIPad13 | boolean | returns true/false if device is iPad and running on iOS13 |
isIPod13 | boolean | returns true/false if device is iPod and running on iOS13 |
isElectron | boolean | returns true/false if running on Electron |
deviceDetect | function | return data object which includes all data about device (e.g version, engine, os etc.) |
Views
Available views:
- MobileView
- BrowserView
- TabletView
- AndroidView
- IOSView
- IEView
- WinPhoneView
- MobileOnlyView
- SmartTVView
- ConsoleView
- WearableView
- CustomView -- has
condition
prop which takes any expression which results into boolean (e.g browserName === 'Chrome')
Each view accepts three props:
viewClassName
- to style the viewstyle
- to add inline styles to viewchildren
- to pass children to viewrenderWithFragment
- render with React.Fragment
instead of <div>
withOrientationChange
A HOC for getting isLandscape
and isPortrait
props for mobile
import { withOrientationChange } from 'react-device-detect'
let App = props => {
const { isLandscape, isPortrait } = props
if (isLandscape) {
return <div>The device is in Landscape mode</div>
}
if (isPortrait) {
return <div>The device is in Portrait mode</div>
}
}
App = withOrientationChange(App)
export { App }
License
MIT