스킬 use-dom
🌐

use-dom

안전

Запуск веб-кода в Expo Webviews

Веб-библиотеки React, такие как графики, подсветка синтаксиса и Rich Text редакторы, не могут работать напрямую в React Native. Этот навык предоставляет паттерн компонентов Expo DOM для запуска веб-кода в webview на нативных устройствах, при этом рендеринг остаётся как есть на вебе, что позволяет осуществлять постепенную миграцию с веба на натив.

지원: Claude Codex Code(CC)
📊 71 적절함
1

스킬 ZIP 다운로드

2

Claude에서 업로드

설정 → 기능 → 스킬 → 스킬 업로드로 이동

3

토글을 켜고 사용 시작

테스트해 보기

"use-dom" 사용 중입니다. Создайте компонент DOM, который отображает график с использованием recharts

예상 결과:

  • // components/Chart.tsx
  • "use dom";
  •  
  • import { LineChart, Line, XAxis, YAxis, Tooltip } from 'recharts';
  •  
  • interface Props {
  • data: Array<{ name: string; value: number }>;
  • dom?: import('expo/dom').DOMProps;
  • }
  •  
  • export default function Chart({ data }: Props) {
  • return (
  • <LineChart width={400} height={300} data={data}>
  • <XAxis dataKey="name" />
  • <YAxis />
  • <Tooltip />
  • <Line type="monotone" dataKey="value" stroke="#8884d8" />
  • </LineChart>
  • );
  • }

"use-dom" 사용 중입니다. Как передать данные из натива в компонент DOM?

예상 결과:

Передавайте данные как сериализуемые пропсы (строки, числа, булевы значения, массивы, простые объекты). Компонент DOM получает эти пропсы и может использовать их напрямую. Для функций передавайте асинхронные функции как пропсы для возможности коммуникации обратно в натив.

"use-dom" 사용 중입니다. Для чего нужен проп dom?

예상 결과:

Проп dom настраивает поведение webview. Распространённые опции включают: scrollEnabled (отключить прокрутку body), contentInsetAdjustmentBehavior (управление отступами safe area) и style (установить явные размеры). На вебе этот проп игнорируется.

보안 감사

안전
v1 • 1/23/2026

All 63 static findings are false positives. Detected patterns are markdown formatting (backticks for inline code) and TypeScript type annotations (import() for type references) in documentation examples. No executable code with security implications present.

1
스캔된 파일
418
분석된 줄 수
0
발견 사항
1
총 감사 수
보안 문제를 찾지 못했습니다
감사자: claude

품질 점수

38
아키텍처
100
유지보수성
87
콘텐츠
29
커뮤니티
100
보안
91
사양 준수

만들 수 있는 것

Добавление графиков и визуализации данных

Используйте библиотеки графиков, такие как recharts или chart.js, для отображения визуализаций данных, требующих DOM API, недоступных в React Native.

Миграция веб-компонентов React

Перенесите существующие React компоненты из веб-проекта в приложение Expo без переписывания, запуская их в webview на нативных устройствах.

Отображение кода с подсветкой синтаксиса

Отображайте блоки кода с подсветкой синтаксиса, используя библиотеки вроде react-syntax-highlighter, которые зависят от DOM рендеринга.

이 프롬프트를 사용해 보세요

Базовый DOM компонент
Создайте компонент DOM под названием 'Chart', который использует recharts для отображения линейного графика. Компонент должен принимать проп 'data' с массивом объектов { name: string; value: number }. Включите правильную типизацию TypeScript для пропа dom.
Коммуникация между нативом и вебом
Создайте компонент DOM, который может вызывать нативные функции. Компонент должен иметь проп 'onSubmit', который является асинхронной функцией, принимающей строку и возвращающей булево значение. Покажите, как передать это из нативного родителя.
CSS стили в DOM
Создайте компонент DOM, который использует CSS для стилизации. Покажите, как импортировать CSS файл и применять стили к элементам. Также покажите использование inline стилей как альтернативы.
Интеграция роутера
Создайте компонент DOM, который использует expo-router для навигации. Покажите, как передать параметры маршрута из нативного родителя, поскольку useLocalSearchParams не работает напрямую в компонентах DOM.

모범 사례

  • Сохраняйте компоненты DOM сфокусированными на конкретной функциональности, а не создавайте целые экраны
  • Используйте нативные компоненты для навигационной оболочки и передавайте параметры маршрута как пропсы в компоненты DOM
  • Подключайте ассеты с помощью require() вместо использования публичной директории для лучшей сборки
  • Тестируйте компоненты DOM на всех целевых платформах, так как веб и нативные webview могут рендериться немного по-разному

피하기

  • Размещение целых экранов приложения внутри webview - это противоречит цели React Native
  • Забывание директивы 'use dom' - компонент не будет работать без неё
  • Использование API локальных модулей внутри компонентов DOM - хуки роутера, такие как useLocalSearchParams, требуют нативного доступа
  • Разделение состояния между нативом и webview - у них изолированные JavaScript контексты

자주 묻는 질문

Что такое директива 'use dom'?
Директива 'use dom' в начале файла сообщает Expo обрабатывать этот компонент как компонент DOM. Она должна быть первым оператором в файле, и компонент должен быть в отдельном файле.
Могу ли я использовать любой npm пакет в компоненте DOM?
Большинство npm пакетов работают, если они совместимы с браузерной средой. Пакеты, которые зависят от Node.js API или нативных модулей, не будут работать. Библиотеки, такие как recharts, react-syntax-highlighter и moment, работают хорошо.
Как осуществляется коммуникация между компонентом DOM и нативным кодом?
Передавайте асинхронные функции как пропсы в компонент DOM. Webview может вызывать эти функции для запуска нативного поведения, такого как отображение алертов, сохранение данных или навигация.
В чём разница между веб и нативным рендерингом?
На нативе (iOS/Android) компонент рендерится внутри webview. На вебе он рендерится напрямую без обёртки webview. Проп dom игнорируется на вебе.
Могу ли я использовать компоненты React Native вместе с компонентами DOM?
Да. Импортируйте и используйте компоненты DOM как любые другие компоненты. Они могут свободно смешиваться с View, Text и другими компонентами React Native на одном экране.
Почему проп dom обязателен?
Проп dom предоставляет информацию о типе для конфигурации webview и требуется для поддержки TypeScript. Даже если вы не используете никакие опции, вы должны типизировать проп для правильной поддержки в IDE.

개발자 세부 정보

작성자

expo

라이선스

MIT

참조

main

파일 구조

📄 SKILL.md