JSX
O RunJS suporta a sintaxe JSX, permitindo que você escreva código de forma semelhante a componentes React. O JSX é compilado automaticamente antes da execução.
Notas de compilação
- Usa o sucrase para transformar o JSX.
- O JSX é compilado em
ctx.libs.React.createElementectx.libs.React.Fragment. - Não é necessário importar o React: Você pode escrever JSX diretamente; ele usará automaticamente o
ctx.libs.Reactapós a compilação. - Ao carregar um React externo via
ctx.importAsync('react@x.x.x'), o JSX passará a usar o métodocreateElementdessa instância específica.
Usando React e componentes integrados
O RunJS inclui o React e bibliotecas de UI comuns de forma integrada. Você pode acessá-los diretamente via ctx.libs sem usar import:
- ctx.libs.React — Núcleo do React
- ctx.libs.ReactDOM — ReactDOM (pode ser usado com
createRoot, se necessário) - ctx.libs.antd — Componentes do Ant Design
- ctx.libs.antdIcons — Ícones do Ant Design
Ao escrever JSX diretamente, você não precisa desestruturar o React. Você só precisa desestruturar de ctx.libs ao usar Hooks (como useState, useEffect) ou Fragment (<>...</>):
Nota: O React integrado e o React externo importado via ctx.importAsync() não podem ser misturados. Se você usar uma biblioteca de UI externa, o React também deve ser importado da mesma fonte externa.
Usando React e componentes externos
Ao carregar uma versão específica do React e de bibliotecas de UI via ctx.importAsync(), o JSX usará essa instância do React:
Se o antd depender de react/react-dom, você pode especificar a mesma versão via deps para evitar múltiplas instâncias:
Nota: Ao usar um React externo, bibliotecas de UI como o antd também devem ser importadas via ctx.importAsync(). Não as misture com ctx.libs.antd.
Pontos principais da sintaxe JSX
- Componentes e props:
<Button type="primary">Texto</Button> - Fragment:
<>...</>ou<React.Fragment>...</React.Fragment>(requer a desestruturação deconst { React } = ctx.libsao usar Fragment) - Expressões: Use
{expressão}no JSX para inserir variáveis ou operações, como{ctx.user.name}ou{count + 1}. Não use a sintaxe de template{{ }}. - Renderização condicional:
{flag && <span>Conteúdo</span>}ou{flag ? <A /> : <B />} - Renderização de listas: Use
array.map()para retornar uma lista de elementos e garanta que cada elemento tenha umakeyestável.

