К основному содержанию
скилл CX Codex GP ChatGPT официальный · OpenAI

swr · openai — скилл для Codex: что делает и как установить

Скилл подсказывает, как строить загрузку данных в React через SWR: кэшировать, обновлять, мутировать и загружать страницы.

Установить в Codex · Через Skills CLI (Vercel) Все способы и платформы ↓
npx skills add openai/plugins --skill swr -a codex
Открыть на GitHub

Что делает swr

Скилл помогает собирать React-приложения с клиентской загрузкой данных через SWR. Он объясняет работу useSWR, ключей ресурсов, fetcher-функций и возвращаемых состояний: данных, ошибки, загрузки и обновления. Кэш можно разделить между компонентами, а mutate() использовать для ручной перепроверки.

В руководстве есть useSWRMutation для изменений на сервере, оптимистичных обновлений и отката при ошибке. useSWRInfinite разбирает пагинацию и бесконечную загрузку, а SWRConfig задаёт общие настройки. Также рассмотрены условные запросы, повторы после ошибок и подписки на WebSocket или SSE.

Хуки нельзя вызывать условно: чтобы пропустить запрос, передавайте ключ null или другое ложное значение. Для работы нужен проект на React и библиотека swr; установить сам скилл в Codex можно командами из инструкции.

Какие задачи решает

  • настроить загрузку данных в React через SWR
  • разделить кэш запросов между компонентами
  • добавить мутацию с оптимистичным обновлением
  • собрать пагинацию или бесконечную загрузку
  • подключить повтор запросов и обновление по событию

Примеры запросов агенту

  • Настрой загрузку профиля через useSWR и обработай состояния загрузки и ошибки.
  • Добавь изменение пользователя через useSWRMutation с оптимистичным обновлением и откатом при ошибке.
  • Собери список товаров с useSWRInfinite и кнопкой «Загрузить ещё».

Как установить swr

1Через Skills CLI (Vercel)

npx skills add openai/plugins --skill swr -a codex

2Вручную: положить файлы

.agents/skills/swr/SKILL.md

Для всех проектов — ~/.agents/skills/

По шагам, с командами для каждой платформы: Скиллы Codex: как установить, где лежат и как вызвать

Вопросы о swr

Как установить swr в Codex?

Выполните npx skills add openai/plugins --skill swr, затем npx skills add openai/plugins --skill swr -a codex. Файл скилла будет доступен по пути .agents/skills/swr/SKILL.md.

Что делает скилл swr?

Он даёт рекомендации по клиентской загрузке данных в React с библиотекой SWR: кэшу, ревалидации, мутациям, оптимистичным обновлениям, пагинации и подпискам.

Как пропустить запрос SWR при отсутствии идентификатора?

Передайте null вместо ключа, например useSWR(userId ? "/api/user/${userId}" : null, fetcher). Условный вызов хука использовать нельзя.

Исходный текст

SKILL.md · Apache-2.0
---
name: swr
description: SWR data-fetching expert guidance. Use when building React apps with client-side data fetching, caching, revalidation, mutations, optimistic UI, pagination, or infinite loading using the SWR library.
metadata:
  priority: 4
  docs:
    - "https://swr.vercel.app/docs"
  sitemap: "https://swr.vercel.app/sitemap.xml"
  pathPatterns:
    - 'lib/fetcher.*'
    - 'src/lib/fetcher.*'
    - 'utils/fetcher.*'
    - 'src/utils/fetcher.*'
    - 'hooks/use*SWR*'
    - 'src/hooks/use*SWR*'
    - 'hooks/useFetch*'
    - 'src/hooks/useFetch*'
  importPatterns:
    - 'swr'
    - 'swr/*'
  bashPatterns:
    - '\bnpm\s+(install|i|add)\s+[^\n]*\bswr\b'
    - '\bpnpm\s+(install|i|add)\s+[^\n]*\bswr\b'
    - '\bbun\s+(install|i|add)\s+[^\n]*\bswr\b'
    - '\byarn\s+add\s+[^\n]*\bswr\b'
  promptSignals:
    phrases:
      - "swr"
      - "useswr"
      - "stale-while-revalidate"
    allOf:
      - [data fetching, client]
      - [cache, revalidat]
    anyOf:
      - "mutation"
      - "optimistic"
      - "infinite loading"
      - "pagination"
    noneOf: []
    minScore: 6
---

# SWR — React Hooks for Data Fetching

You are an expert in SWR v2 (latest: 2.4.1), the React Hooks library for data fetching by Vercel. SWR implements the stale-while-revalidate HTTP cache invalidation strategy — serve from cache first, then revalidate in the background.

## Installation

```bash
npm install swr
```

## Core API

### `useSWR`

```tsx
import useSWR from 'swr'

const fetcher = (url: string) => fetch(url).then(res => res.json())

function Profile() {
  const { data, error, isLoading, mutate } = useSWR('/api/user', fetcher)

  if (isLoading) return <div>Loading...</div>
  if (error) return <div>Error loading data</div>
  return <div>Hello, {data.name}</div>
}
```

**Key parameters:**
- `key` — unique string, array, or function identifying the resource (often a URL)
- `fetcher` — async function that receives the key and returns data
- `options` — optional config object

**Return values:** `data`, `error`, `isLoading`, `isValidating`, `mutate`

### `useSWRMutation` — Remote Mutations

```tsx
import useSWRMutation from 'swr/mutation'

async function updateUser(url: string, { arg }: { arg: { name: string } }) {
  return fetch(url, { method: 'POST', body: JSON.stringify(arg) }).then(res => res.json())
}

function Profile() {
  const { trigger, isMutating } = useSWRMutation('/api/user', updateUser)

  return (
    <button disabled={isMutating} onClick={() => trigger({ name: 'New Name' })}>
      Update
    </button>
  )
}
```

### `useSWRInfinite` — Pagination & Infinite Loading

```tsx
import useSWRInfinite from 'swr/infinite'

const getKey = (pageIndex: number, previousPageData: any[]) => {
  if (previousPageData && !previousPageData.length) return null
  return `/api/items?page=${pageIndex}`
}

function Items() {
  const { data, size, setSize, isLoading } = useSWRInfinite(getKey, fetcher)
  const items = data ? data.flat() : []

  return (
    <>
      {items.map(item => <div key={item.id}>{item.name}</div>)}
      <button onClick={() => setSize(size + 1)}>Load More</button>
    </>
  )
}
```

## Global Configuration

Wrap your app (or a subtree) with `SWRConfig` to set defaults:

```tsx
import { SWRConfig } from 'swr'

function App() {
  return (
    <SWRConfig value={{
      fetcher: (url: string) => fetch(url).then(res => res.json()),
      revalidateOnFocus: false,
      dedupingInterval: 5000,
    }}>
      <Dashboard />
    </SWRConfig>
  )
}
```

## Revalidation Strategies

| Strategy | Option | Default |
|---|---|---|
| On window focus | `revalidateOnFocus` | `true` |
| On network recovery | `revalidateOnReconnect` | `true` |
| On mount if stale | `revalidateIfStale` | `true` |
| Polling | `refreshInterval` | `0` (disabled) |
| Manual | Call `mutate()` | — |

## Optimistic Updates

```tsx
const { trigger } = useSWRMutation('/api/user', updateUser, {
  optimisticData: (current) => ({ ...current, name: 'New Name' }),
  rollbackOnError: true,
  populateCache: true,
  revalidate: false,
})
```

## Conditional Fetching

Pass `null` or a falsy key to skip fetching:

```tsx
const { data } = useSWR(userId ? `/api/user/${userId}` : null, fetcher)
```

## Error Retry

SWR retries on error by default with exponential backoff. Customize with:

```tsx
useSWR(key, fetcher, {
  onErrorRetry: (error, key, config, revalidate, { retryCount }) => {
    if (error.status === 404) return // Don't retry on 404
    if (retryCount >= 3) return      // Max 3 retries
    setTimeout(() => revalidate({ retryCount }), 5000)
  },
})
```

## `useSWRSubscription` — Real-Time Data Sources

Subscribe to real-time data (WebSockets, SSE, etc.) with automatic deduplication:

```tsx
import useSWRSubscription from 'swr/subscription'

function LivePrice({ symbol }: { symbol: string }) {
  const { data } = useSWRSubscription(
    `wss://stream.example.com/${symbol}`,
    (key, { next }) => {
      const ws = new WebSocket(key)
      ws.onmessage = (event) => next(null, JSON.parse(event.data))
      ws.onerror = (event) => next(event)
      return () => ws.close()
    }
  )

  return <span>{data?.price}</span>
}
```

The `subscribe` function receives a `next(error, data)` callback and must return a cleanup function. Multiple components using the same key share a single subscription.

## Key Rules

- **Keys must be unique** — two `useSWR` calls with the same key share cache and deduplicate requests
- **Fetcher is optional** when set via `SWRConfig`
- **`mutate(key)`** globally revalidates any hook matching that key
- **Array keys** like `useSWR(['/api/user', id], fetcher)` — the fetcher receives the full array
- **Never call hooks conditionally** — use conditional keys (`null`) instead

© Vercel Labs · Apache-2.0 · openai/plugins

Похожие скиллы

Всё по теме «Фронтенд и UI» →

Сначала — swr от других авторов.

swr Mindrally Инструкции по настройке SWR в связке с React и TypeScript. Помогает агенту писать хуки для выборки, кеширования и мутаций данных. CX Codex +1 870установок frontend-design официальный anthropics Скилл задаёт осмысленное визуальное направление для новых интерфейсов и редизайна. Подойдёт, когда стандартный шаблонный UI не устраивает. 1 025 790установок design-taste-frontend Leonxlnx Скилл задаёт арт-дирекцию для публичных страниц и рабочих экранов, а затем проверяет результат в браузере по скриншотам. Нужен, когда интерфейс выглядит шаблонным или недоработанным. CX Codex +1 678 700установок prototype Matt Pocock Создаёт временный прототип, чтобы проверить логику, модель состояния или вид интерфейса до работы над основным кодом. 986 201установок hyperframes heygen-com Скилл задаёт агенту правила рендера HTML-кода в видео через HyperFrames. Помогает собирать проморолики, эксплейнеры и титры прямо в коде проекта. CX Codex +1 1 200 000установок hyperframes-cli heygen-com Управляет проектами HyperFrames через терминал: собирает таймлайн, проверяет контраст кадров, запускает предпросмотр и рендерит видео локально или в облаке. CX Codex +1 1 300 000установок webapp-testing официальный anthropics Скилл запускает проверки локальных веб-приложений через Playwright: помогает отлаживать UI, делать скриншоты и смотреть логи браузера. 186 758установок

Из того же набора420

Весь набор →
cloudflare Скилл для работы с платформой Cloudflare: помогает агенту выбрать нужный продукт и свериться с документацией вместо устаревших знаний. CX Codex GP ChatGPT 7установок grammar-of-graphics-and-declarative-visualization Скилл помогает строить визуализации табличных данных через Vega-Lite, Vega и Observable Plot. Подходит для декларативных графиков без низкоуровневого рендеринга. CX Codex GP ChatGPT 7установок vercel-storage Подсказывает агенту, какое хранилище Vercel выбрать и как его подключить: Blob, Edge Config, Neon Postgres, Upstash Redis. CX Codex GP ChatGPT 6установок vercel-queues Направляет агента при настройке Vercel Queues: публикации событий, push- и poll-обработчиках и конфигах vercel.json. Пригодится для асинхронных задач в Node.js 22+. CX Codex GP ChatGPT 6установок satori Помогает генерировать динамические OG-изображения в Next.js через Satori и @vercel/og с разметкой на HTML и CSS. CX Codex GP ChatGPT 6установок runtime-cache Скилл подсказывает, как использовать Vercel Runtime Cache для серверного кэширования по регионам и тегам. Пригодится для стратегий за пределами кэша фреймворка. CX Codex GP ChatGPT 6установок routing-middleware Скилл обучает агента настройке Vercel Routing Middleware: перехвату запросов до кэша, редиректам и выбору между Edge, Node.js или Bun. CX Codex GP ChatGPT 6установок investigation-mode Координирует разбор зависших и сломанных процессов: проверяет логи, статусы workflow, браузер и деплой. Пригодится для поиска причины сбоя. CX Codex GP ChatGPT 6установок

Спонсоры проекта

Компании, которые помогают держать аналитику открытой