denwa-web-shared
Version:
A shared library for Next.js App Router projects containing reusable components, hooks, schemas, and utilities.
64 lines (43 loc) • 1.38 kB
Markdown
name: viewport-hooks
description: >
Use the shared viewport hooks rather than react-use.
Load when writing responsive behavior, using useMedia, useLaptopBigViewPort, useMobileViewPort.
type: core
library: denwa-web-shared
library_version: '1.0.58'
sources:
- 'src/client/hooks/use-view-port.ts'
# denwa-web-shared — Use custom viewport hooks
## Setup
```tsx
import { useMobileViewPort } from 'denwa-web-shared/client';
const { isMobileMaxWidth, isMobileMinWidth } = useMobileViewPort();
```
## Core Patterns
### Conditional rendering based on viewport
```tsx
import { useMobileViewPort, useLaptopViewPort } from 'denwa-web-shared/client';
export const ResponsiveLayout = () => {
const { isMobileMaxWidth } = useMobileViewPort();
const { isLaptopMinWidth } = useLaptopViewPort();
if (isMobileMaxWidth) return <MobileMenu />;
if (isLaptopMinWidth) return <DesktopMenu />;
return <DefaultMenu />;
};
```
## Common Mistakes
### HIGH Importing useMedia directly
Wrong:
```tsx
import { useMedia } from 'react-use';
const isMobile = useMedia('(max-width: 450px)');
```
Correct:
```tsx
import { useMobileViewPort } from 'denwa-web-shared/client';
const { isMobileMaxWidth } = useMobileViewPort();
```
Agents import useMedia from react-use and manually provide viewport breakpoints instead of using the custom hooks.
Source: maintainer interview