Inicie um Novo Projeto em React

Se você deseja construir um novo aplicativo ou site totalmente com React, recomendamos escolher uma das estruturas populares na comunidade com tecnologia React.

Você pode usar o React sem uma estrutura, mas descobrimos que a maioria dos aplicativos e sites eventualmente criam soluções para problemas comuns, como divisão de código, roteamento, busca de dados e geração de HTML. Esses problemas são comuns a todas as bibliotecas de UI, não apenas ao React.

Utilizando uma estrutura, você pode começar a usar o React rapidamente, além de evitar criar sua própria estrutura mais tarde.

Deep Dive

Posso usar o React sem uma estrutura?

Você definitivamente pode usar o React sem uma estrutura—é assim que você faria se utilizasse o React para uma parte da sua página. Entretanto, se você está criando uma nova aplicação ou site inteiramente com React, recomendamos a utilização de uma estrutura.

Veja o porquê.

Mesmo que você não precise de roteamento ou busca de dados a princípio, você possivelmente desejará adicionar alguma biblioteca para isso futuramente. À medida que seu pacote JavaScript cresce com cada novo recurso, você pode ter que descobrir como dividir o código para cada rota individualmente. À medida que suas necessidades de busca de dados se tornam mais complexas, é provável que você se depare com uma enxurrada de requisições cliente-servidor que fazem seu aplicativo parecer muito lento. Conforme sua aplicação recebe mais usuários com más condições de rede e dispositivos de baixo custo, você pode precisar gerar HTML a partir de seus componentes para exibir o conteúdo antecipadamente—seja no servidor, ou durante o tempo de compilação. Alterar alguma configuração para executar parte do seu código no servidor ou durante a compilação pode ser bem complicado.

Esses problemas não são específicos do React. É por isso que o Svelte tem o SvelteKit, o Vue tem o Nuxt, e assim por diante. Para solucionar esses problemas por conta própria, você precisará integrar seu bundler com sua biblioteca de roteamento e com sua biblioteca de busca de dados. Não é difícil fazer uma configuração inicial funcionar, mas há muitas sutilezas envolvidas na criação de uma aplicação que carrega rapidamente mesmo enquanto cresce ao longo do tempo. Você vai querer enviar a mínima quantidade de código da aplicação em uma única viagem cliente-servidor, ao mesmo tempo que todos os dados necessários para a página. Provavelmente, você desejará que a página seja interativa antes mesmo que seu código JavaScript ser executado, para ter um carregamento progressivo aprimorado. Você pode querer gerar uma pasta de arquivos HTML totalmente estáticos para suas páginas de marketing que podem ser hospedadas em qualquer lugar e ainda funcionar com JavaScript desabilitado. Desenvolver essas capacidades você mesmo dá muito trabalho.

Os frameworks React nesta página resolvem problemas como esses por padrão, sem nenhum trabalho extra da sua parte. Eles permitem que você comece de forma bem enxuta e depois dimensione seu aplicativo conforme suas necessidades. Cada React framework tem uma comunidade, então encontrar respostas e atualizar ferramentas é mais fácil. Frameworks fornecem estrutura ao seu código, ajudando você e outros reaproveitar contexto e habilidades entre diferentes projetos. Por outro lado, com uma configuração personalizada, é mais fácil ficar preso em versões de dependências sem suporte, e você acabará criando sua própria estrutura, porem sem uma comunidade ou meios de atualizar as dependências (e talvez seja alguma coisa parecida com oque fizemos no passado, porém projetado de forma mais aleatória).

Se o seu aplicativo tiver restrições incomuns que não são bem atendidas por esses frameworks, ou você prefere resolver esses problemas sozinho, você pode criar sua própria configuração personalizada com React. Use react e react-dom apartir do npm, configure seu processo de construção personalizado com um bundler como Vite ou Parcel, e adicione outras ferramentas conforme necessário para roteamento, geração estática ou renderização do lado do servidor e muito mais.

Frameworks baseados em React com qualidade de mercado

Esses frameworks oferecem suporte a todos os recursos necessários para implantar e dimensionar seu aplicativo em produção e estão trabalhando para dar suporte à nossa visão de arquitetura full-stack. Todos os frameworks que recomendamos são de código aberto com comunidades ativas para suporte, e pode ser implantado em seu próprio servidor ou em um provedor de hospedagem. Se você é um autor de um framework e está interessado em ser incluído nesta lista, por favor nos avise.

Next.js

Next.js’ Pages Router é um framework React full-stack. É versátil e permite criar aplicativos React de qualquer tamanho – desde um blog quase todo estático até um aplicativo dinâmico complexo. Para criar um novo projeto Next.js, execute em seu terminal:

Terminal
npx create-next-app@latest

Se você é novo no Next.js, confira o aprender curso Next.js.

Next.js é mantido por Vercel. Você pode implantar um aplicativo Next.js em qualquer Node.js ou hospedagem sem servidor, ou em seu próprio servidor. Next.js também suporta uma exportação estática que não requer um servidor.

Remix

Remix é um framework React full-stack com roteamento aninhado. Ele permite que você divida sua aplicação em partes aninhadas que podem carregar dados em paralelo e atualizar em resposta às ações do usuário. Para criar um novo projeto com Remix, execute no seu terminal:

Terminal
npx create-remix

Caso você seja novo ao Remix, confira o tutorial de blog do Remix (curto) e o tutorial de aplicações Remix (longo).

Gatsby

Gatsby é um framework React para sites rápidos baseados em CMS (Content Management Systems). Seu rico ecossistema de plugins e sua camada de dados GraphQL simplificam a integração de conteúdo, APIs e serviços em um único site. Para criar um novo projeto com Gatsby, execute no seu terminal:

Terminal
npx create-gatsby

Caso você seja novo ao Gatsby, confira o tutorial de Gatsby.

Gatsby é mantido pela Netlify. Você pode implantar um site Gatsby totalmente estático em qualquer hospedagem estática. Caso você opte por usar apenas recursos de servidor, certifique-se que seu provedor de hospedagem possui suporte para Gatsby.

Expo (para aplicações mobile)

Expo é um framework React que permite que você crie aplicações universais para Android, iOS e web com UIs genuinamente nativas. Ele fornece um SDK para React Native que torna as partes nativas mais fáceis de usar. Para criar um novo projeto Expo, execute no seu terminal:

Terminal
npx create-expo-app

Caso você seja novo ao Expo, confira o tutorial de Expo.

Expo é mantido pela Expo (a empresa). Construir aplicações com Expo é gratuito, e você pode submetê-las para as lojas de aplicativos do Google e da Apple sem restrições. Adicionalmente, Expo fornece serviços em nuvem pagos opcionais.

Frameworks React de ponta

Conforme exploramos como continuar melhorando o React, percebemos que integrar o React mais de perto com frameworks (especificamente com roteamento, bundling e tecnologias de servidor) é a nossa maior oportunidade de ajudar usuários do React a construir aplicações melhores. A equipe Next.js concordou em colaborar conosco em pesquisar, desenvolver, integrar e testar recursos de ponta do React que são agnósticos a frameworks, como Componentes de Servidor do React.

Esses recursos estão mais próximos de estarem prontos para produção dia após dia, e nós temos conversado com outros desenvolvedores de bundlers e frameworks sobre integrá-los. Nossa esperança é que, em um ou dois anos, todos os frameworks listados nesta página terão suporte completo para esses recursos. (Se você é um autor de framework interessado em se juntar a nós para experimentar esses recursos, por favor nos comunique!)

Next.js (App Router)

O App Router do Next.js é uma reformulação das APIs Next.js com o objetivo de cumprir a visão de arquitetura full-stack da equipe React. Ele permite buscar dados em componentes assíncronos que são executados no servidor ou mesmo durante a construção.

Next.js é mantido pela Vercel. Você pode implantar uma aplicação Next.js para qualquer Node.js ou hospedagem sem servidor, ou para seu próprio servidor. Next.js também suporta exportação estática que não requer um servidor.

Deep Dive

Quais recursos compõem a visão de arquitetura full-stack da equipe React?

O App Router do Next.js implementa na íntegra a especificação oficial dos Componentes de Servidor do React. Isso permite que você misture componentes apenas de servidor, componentes interativos e componentes gerados durante a construção (build) em uma única árvore React.

Por exemplo, você pode escrever um componente React apenas de servidor como uma função async que lê de um banco de dados ou de um arquivo. Então você pode passar dados deste componente para baixo, para seus componentes interativos:

// Este componente roda *apenas* no servidor (ou durante a construção).
async function Talks({ confId }) {
// 1. Você está no servidor, então você pode se comunicar com sua camada de dados. Rotas de APIs não são necessárias.
const talks = await db.Talks.findAll({ confId });

// 2. Adicione qualquer quantidade de lógica de renderização. Isso não aumentará o tamanho do seu pacote JavaScript.
const videos = talks.map(talk => talk.video);

// 3. Passe os dados para baixo para os componentes que rodarão no navegador.
return <SearchableVideoList videos={videos} />;
}

O App Router do Next.js também integra busca de dados com Suspense. Isso permite que você especifique um estado de carregamento (como um esqueleto) para diferentes partes da sua interface de usuário diretamente na sua árvore React:

<Suspense fallback={<TalksLoading />}>
<Talks confId={conf.id} />
</Suspense>

Componentes de Servidor e Suspense são recursos do React ao invés de recursos do Next.js. Entretanto, adotá-los no nível do framework requer comprometimento e um esforço de implementação que não é trivial. No momento, o App Router do Next.js é a implementação mais completa. A equipe React está trabalhando com desenvolvedores de bundlers para tornar esses recursos mais fáceis de implementar na próxima geração de frameworks.