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
Mensagem pronta para colar
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-domOu 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.mdConteú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
_layoutnã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
- Deve ter a diretiva
'use dom';no topo do arquivo - Exportação padrão única — Um componente React por arquivo
- Arquivo próprio — Não pode ser definido inline ou combinado com componentes nativos
- Apenas props serializáveis — Strings, números, booleanos, arrays, objetos simples
- 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.
Popularidade
- Estrelas no GitHub
- 48 mil
- Posição no ranking
- #4462
- Licença
- MIT
- Atualizada em
- 15/10/2026
Comentários
- …
Mais skills deste repositório
00-andruia-consultant
Ajuda seu agente a iniciar ou melhorar projetos de IA. Ele analisa código, sugere ferramentas e cria planos de ação em espanhol.
sickn33/agentic-awesome-skills
007
Faz seu agente realizar auditorias de segurança e modelagem de ameaças. É útil para proteger projetos contra ataques e vulnerabilidades.
sickn33/agentic-awesome-skills
10-andruia-skill-smith
Ajuda seu agente a criar ou melhorar ferramentas de IA. Ele define como as ferramentas funcionam, escreve a documentação e valida a estrutura.
sickn33/agentic-awesome-skills
20-andruia-niche-intelligence
Faz seu agente criar um resumo sobre um setor específico. É útil para entender o contexto, regras, padrões de uso e riscos de um projeto, usando fontes confiáveis.
sickn33/agentic-awesome-skills
Skills parecidas
angular-developer
Ajuda seu agente a criar código Angular e a dar conselhos sobre a estrutura do projeto. É útil para iniciar novos projetos, criar partes do código ou melhorar a performance e acessibilidade.
affaan-m/ECC
frontend-a11y
Ajuda seu agente a tornar interfaces web acessíveis para todos. Ele garante que sites e apps funcionem bem com leitores de tela e navegação por teclado.
affaan-m/ECC
frontend-patterns
Faz seu agente aplicar padrões modernos no desenvolvimento frontend. Ele otimiza performance, gerencia estado e segue boas práticas em React e Next.js.
affaan-m/ECC