Pular para o conteúdo
Skillpedia
Sites e telas (frontend)48 mil · #4462

use-dom

Permite que seu agente use código web em aplicativos móveis e na web. Facilita a migração de código web para aplicativos nativos aos poucos.

O que ela faz

Permite que você use código web (como bibliotecas de gráficos ou editores de texto) diretamente em aplicativos móveis. Ele faz isso rodando o código web dentro de uma 'janela' especial no aplicativo, que se comporta como um navegador.

Quando usar

  • ✓Quando você quer usar uma biblioteca feita apenas para a web (ex: gráficos, editores de texto).
  • ✓Para trazer partes de um site existente para um aplicativo sem reescrever tudo.
  • ✓Quando você precisa de recursos visuais complexos que são mais fáceis de fazer na web.

Exemplo do que pedir para a IA

“Como posso usar a biblioteca de gráficos Recharts no meu aplicativo móvel?”

Quer saber mais? Abra as seções abaixo.

Como usar

O jeito mais fácil: copie a mensagem abaixo e cole no Claude, ChatGPT, Cursor ou outra IA. Ela lê a skill e segue as instruções.

Link da skill

https://github.com/sickn33/agentic-awesome-skills/blob/main/plugins/agentic-awesome-skills-claude/skills/use-dom/SKILL.md

Mensagem pronta para colar

Use esta skill para me ajudar: https://github.com/sickn33/agentic-awesome-skills/blob/main/plugins/agentic-awesome-skills-claude/skills/use-dom/SKILL.md Leia o arquivo SKILL.md desse link e siga as instruções dele na minha tarefa.
Como funciona

Você escreve seu código web em um arquivo especial que começa com "use dom";. Esse código roda em uma área do aplicativo que funciona como um navegador. Você pode passar informações para essa área e até receber resultados de volta.

Instalação

Jeito mais fácil: copie o link da skill e cole no Claude, ChatGPT ou Cursor pedindo para seguir as instruções.

No terminal (Claude Code, Codex, Cursor), na pasta do projeto:

npx skills add sickn33/agentic-awesome-skills --skill use-dom

Ou baixe só o arquivo:

curl -L https://raw.githubusercontent.com/sickn33/agentic-awesome-skills/main/plugins/agentic-awesome-skills-claude/skills/use-dom/SKILL.md -o SKILL.md
Conteúdo técnico (SKILL.md)

Tradução do texto original do autor no GitHub. Os comandos e códigos estão como no original.

O que são Componentes DOM?

Componentes DOM permitem que código web seja executado exatamente como está em um webview em plataformas nativas, enquanto é renderizado como está na web. Isso possibilita o uso de bibliotecas exclusivas da web como recharts, react-syntax-highlighter, ou qualquer biblioteca React para web em seu aplicativo Expo sem modificações.

Quando Usar Componentes DOM

Use componentes DOM quando precisar de:

  • Bibliotecas exclusivas da web — Gráficos (recharts, chart.js), realçadores de sintaxe, editores de texto rico, ou qualquer biblioteca que dependa de APIs DOM
  • Migração de código web — Traga componentes React para web existentes para o nativo sem reescrever
  • Layouts HTML/CSS complexos — Quando recursos CSS não estão disponíveis no React Native
  • iframes ou embeds — Incorporar conteúdo externo que requer um contexto de navegador
  • Canvas ou WebGL — APIs gráficas da web não disponíveis nativamente

Quando NÃO Usar Componentes DOM

Evite componentes DOM quando:

  • Performance nativa é crítica — Webviews adicionam sobrecarga
  • UI simples — Componentes React Native são mais eficientes para layouts básicos
  • Integração nativa profunda — Use módulos locais em vez disso para APIs nativas
  • Rotas de layout — Arquivos _layout não podem ser componentes DOM

Componente DOM Básico

Crie um novo arquivo com a diretiva 'use dom'; no topo:

// components/WebChart.tsx
"use dom";

export default function WebChart({
  data,
}: {
  data: number[];
  dom: import("expo/dom").DOMProps;
}) {
  return (
    <div style={{ padding: 20 }}>
      <h2>Chart Data</h2>
      <ul>
        {data.map((value, i) => (
          <li key={i}>{value}</li>
        ))}
      </ul>
    </div>
  );
}

Regras para Componentes DOM

  1. Deve ter a diretiva 'use dom'; no topo do arquivo
  2. Exportação padrão única — Um componente React por arquivo
  3. Arquivo próprio — Não pode ser definido inline ou combinado com componentes nativos
  4. Apenas props serializáveis — Strings, números, booleanos, arrays, objetos simples
  5. Inclua CSS no arquivo do componente — Componentes DOM rodam em contexto isolado

A Prop dom

Todo componente DOM recebe uma prop especial dom para configuração do webview. Sempre a tipe em suas props:

"use dom";

interface Props {
  content: string;
  dom: import("expo/dom").DOMProps;
}

export default function MyComponent({ content }: Props) {
  return <div>{content}</div>;
}

Opções Comuns da Prop dom

// Disable body scrolling
<DOMComponent dom={{ scrollEnabled: false }} />

// Flow under the notch (disable safe area insets)
<DOMComponent dom={{ contentInsetAdjustmentBehavior: "never" }} />

// Control size manually
<DOMComponent dom={{ style: { width: 300, height: 400 } }} />

// Combine options
<DOMComponent
  dom={{
    scrollEnabled: false,
    contentInsetAdjustmentBehavior: "never",
    style: { width: '100%', height: 500 }
  }}
/>

Expondo Ações Nativas para o Webview

Passe funções assíncronas como props para expor funcionalidades nativas ao componente DOM:

// app/index.tsx (native)
import { Alert } from "react-native";
import DOMComponent from "@/components/dom-component";

export default function Screen() {
  return (
    <DOMComponent
      showAlert={async (message: string) => {
        Alert.alert("From Web", message);
      }}
      saveData={async (data: { name: string; value: number }) => {
        // Save to native storage, database, etc.
        console.log("Saving:", data);
        return { success: true };
      }}
    />
  );
}
// components/dom-component.tsx
"use dom";

interface Props {
  showAlert: (message: string) => Promise<void>;
  saveData: (data: {
    name: string;
    value: number;
  }) => Promise<{ success: boolean }>;
  dom?: import("expo/dom").DOMProps;
}

export default function DOMComponent({ showAlert, saveData }: Props) {
  const handleClick = async () => {
    await showAlert("Hello from the webview!");
    const result = await saveData({ name: "test", value: 42 });
    console.log("Save result:", result);
  };

  return <button onClick={handleClick}>Trigger Native Action</button>;
}

Usando Bibliotecas Web

Componentes DOM podem usar qualquer biblioteca web:

// components/syntax-highlight.tsx
"use dom";

import SyntaxHighlighter from "react-syntax-highlighter";
import { docco } from "react-syntax-highlighter/dist/esm/styles/hljs";

interface Props {
  code: string;
  language: string;
  dom?: import("expo/dom").DOMProps;
}

export default function SyntaxHighlight({ code, language }: Props) {
  return (

…
Perguntas frequentes

Posso usar qualquer biblioteca web?

Sim, desde que ela funcione com código web padrão e não precise de acesso direto a recursos nativos do celular que não sejam expostos a ela.

Isso deixa meu aplicativo mais lento?

Pode ser um pouco mais lento do que usar componentes feitos especificamente para celular, pois usa uma 'janela' de navegador. Para partes simples, é melhor usar os componentes normais do celular.

Como o código web se comunica com o código do aplicativo?

Você pode passar informações (como dados para um gráfico) como 'propriedades' para o código web, e o código web pode chamar funções que você definiu no aplicativo para enviar resultados de volta.

Detalhes

Descrição original do autor

Use Expo DOM components to run web code in a webview on native and as-is on web. Migrate web code to native incrementally.

repo: sickn33/agentic-awesome-skills

Popularidade

Estrelas no GitHub
48 mil
Posição no ranking
#4462
Licença
MIT
Atualizada em
15/10/2026

Essa skill é útil?

0

Entre para votar.

Comentários

  • …

Mais skills deste repositório

Skills parecidas