# Pull To Refresh
URL: /react/components/pull-to-refresh
Source: https://github.com/daangn/seed-design/blob/dev/docs/content/react/components/pull-to-refresh.mdx
사용자가 화면을 아래로 당겨 콘텐츠를 새로고침할 수 있게 해주는 컴포넌트입니다. 모바일 환경에서 최신 콘텐츠를 불러올 때 사용됩니다.
사용 가능 버전: @seed-design/react@0.0.1, @seed-design/css@0.0.1
```tsx
import { AppBar, AppScreen } from "@seed-design/stackflow";
import { type StaticActivityComponentType } from "@stackflow/react/future";
import { VStack } from "@seed-design/react";
import {
PullToRefreshContent,
PullToRefreshIndicator,
PullToRefreshRoot,
} from "seed-design/ui/pull-to-refresh";
declare module "@stackflow/config" {
interface Register {
ActivityPullToRefreshPreview: {};
}
}
const ActivityPullToRefreshPreview: StaticActivityComponentType<
"ActivityPullToRefreshPreview"
> = () => {
// AppScreen is imported from @seed-design/stackflow instead of snippet for demo purpose.
// AppScreen snippet is integrating PullToRefresh, so it's not necessary to use it here.
return (
Pull To Refresh
{}}
onPtrRefresh={async () => {
await new Promise((resolve) => setTimeout(resolve, 1000));
}}
>
Lorem ipsum dolor sit amet consectetur adipisicing elit. Numquam autem deserunt
reprehenderit ducimus sunt. Quod laudantium excepturi tempora fuga repellendus
accusantium nam maiores? Quas debitis, neque ullam eligendi minus sit?
);
};
export default ActivityPullToRefreshPreview;
```
## Installation
- npm: npx @seed-design/cli@latest add ui:pull-to-refresh
- pnpm: pnpm dlx @seed-design/cli@latest add ui:pull-to-refresh
- yarn: yarn dlx @seed-design/cli@latest add ui:pull-to-refresh
- bun: bun x @seed-design/cli@latest add ui:pull-to-refresh
## Props
### `PullToRefreshRoot`
### `PullToRefreshIndicator`
### `PullToRefreshContent`
## Examples
### PTR in Tabs
```tsx
import { VStack } from "@seed-design/react";
import { type StaticActivityComponentType } from "@stackflow/react/future";
import { AppBar, AppBarMain } from "seed-design/ui/app-bar";
import { AppScreen, AppScreenContent } from "seed-design/ui/app-screen";
import {
PullToRefreshContent,
PullToRefreshIndicator,
PullToRefreshRoot,
} from "seed-design/ui/pull-to-refresh";
import { TabsContent, TabsList, TabsRoot, TabsTrigger } from "seed-design/ui/tabs";
declare module "@stackflow/config" {
interface Register {
ActivityPullToRefreshTabs: {};
}
}
const ActivityPullToRefreshTabs: StaticActivityComponentType<"ActivityPullToRefreshTabs"> = () => {
return (
Pull To Refresh
Tab 1
Tab 2
{}}
onPtrRefresh={async () => {
await new Promise((resolve) => setTimeout(resolve, 1000));
}}
>
Lorem ipsum dolor sit amet consectetur adipisicing elit. Numquam autem deserunt
reprehenderit ducimus sunt. Quod laudantium excepturi tempora fuga repellendus
accusantium nam maiores? Quas debitis, neque ullam eligendi minus sit?
PTR is not available in this tab.
);
};
export default ActivityPullToRefreshTabs;
```
### Disabled
`disabled` 속성을 사용하여 PTR를 비활성화할 수 있습니다.
```tsx
import { Box, HStack, Text } from "@seed-design/react";
import { useState } from "react";
import {
PullToRefreshContent,
PullToRefreshIndicator,
PullToRefreshRoot,
} from "seed-design/ui/pull-to-refresh";
import { Switch } from "seed-design/ui/switch";
const PullToRefreshDisabled = () => {
const [disabled, setDisabled] = useState(false);
return (
{}}
onPtrRefresh={async () => {
await new Promise((resolve) => setTimeout(resolve, 1000));
}}
disabled={disabled}
>
Disabled
);
};
export default PullToRefreshDisabled;
```
### Prevent Pull
`PullToRefresh.preventPull` 속성을 사용하여 특정 영역에서 PTR 동작을 방지할 수 있습니다. `user-select: auto;`등을 통해 텍스트 선택이 가능한 영역에서 주로 사용됩니다.
```tsx
import { AppBar, AppScreen } from "@seed-design/stackflow";
import { type StaticActivityComponentType } from "@stackflow/react/future";
import { VStack, PullToRefresh, Box } from "@seed-design/react";
import {
PullToRefreshContent,
PullToRefreshIndicator,
PullToRefreshRoot,
} from "seed-design/ui/pull-to-refresh";
declare module "@stackflow/config" {
interface Register {
ActivityPullToRefreshPreventPull: {};
}
}
const ActivityPullToRefreshPreventPull: StaticActivityComponentType<
"ActivityPullToRefreshPreventPull"
> = () => {
// AppScreen is imported from @seed-design/stackflow instead of snippet for demo purpose.
// AppScreen snippet is integrating PullToRefresh, so it's not necessary to use it here.
return (
Pull To Refresh
{}}
onPtrRefresh={async () => {
await new Promise((resolve) => setTimeout(resolve, 1000));
}}
>
이 영역은 당겨서 새로고침이 가능합니다. Amet in laborum proident fugiat mollit quis
aute mollit esse nostrud. Excepteur ea proident ipsum duis. Nulla Lorem pariatur
exercitation velit anim.
이 영역은 당겨서 새로고침이 불가능합니다. Aliquip ad amet eu dolore id enim
excepteur laboris officia anim in. Irure irure nulla sit eiusmod aliqua sint
excepteur amet laboris.
이 영역은 당겨서 새로고침이 가능합니다. Amet in laborum proident fugiat mollit quis
aute mollit esse nostrud. Excepteur ea proident ipsum duis. Nulla Lorem pariatur
exercitation velit anim.
이 영역은 당겨서 새로고침이 불가능합니다. Aliquip ad amet eu dolore id enim
excepteur laboris officia anim in. Irure irure nulla sit eiusmod aliqua sint
excepteur amet laboris.
);
};
export default ActivityPullToRefreshPreventPull;
```