Adeus createResource: Async agora é nativo
O Solid 2.0, agora em Release Candidate, reformula fundamentalmente as operações assíncronas, integrando-as como cidadãs de primeira classe dentro do grafo reativo. Isso elimina a necessidade da primitiva createResource do Solid 1, permitindo que computações como createMemo retornem promises diretamente. O framework agora entende e gerencia nativamente valores assíncronos, simplificando como fetchUser ou fontes de dados similares se integram aos fluxos reativos.
Remover createResource simplifica a lógica de busca de dados e limpa o código dos componentes. No Solid 1, os desenvolvedores gerenciavam as saídas de createResource, necessitando de verificações dispersas de null ou undefined ao acessar valores de recursos. O retorno direto de promise do Solid 2 significa que o grafo reativo lida com a prontidão dos dados, removendo essas verificações e permitindo que os componentes lidem apenas com valores simples e definidos.
As primitivas de limite (boundary) também foram rearquitetadas para se alinhar ao novo modelo async, melhorando a experiência tanto do desenvolvedor quanto do usuário. Suspense é substituído pelo limite Loading, que renderiza fallbacks especificamente para a ausência inicial de dados. ErrorBoundary torna-se Errored, sendo em grande parte uma renomeação com reformulações subjacentes, e SuspenseList agora é Reveal.
Essa abordagem refinada de limites melhora significativamente a experiência do usuário. Ao contrário de outros frameworks que bloqueiam a UI ao consumir promises, no Solid 2, o framework consome promises na criação dentro de seu grafo e bloqueia apenas onde o valor é lido. Isso permite que a UI seja atualizada imediatamente à medida que partes individuais de dados ficam prontas, em vez de esperar que todas as requisições terminem. isPending rastreia buscas de dados subsequentes sem destruir a UI.
Uma experiência de desenvolvedor radicalmente mais limpa
O Solid 2.0 refina significativamente a experiência do desenvolvedor para mutações de dados e efeitos. Um novo fluxo de mutação introduz a primitiva action, que define um ciclo de vida claro para atualizações. Combinado com createOptimistic e createOptimisticStore, este sistema permite rollback automático da UI: alterações otimistas locais são transitórias, desaparecendo se uma chamada de API falhar e revertendo a UI para o estado autoritativo do servidor.
O gerenciamento de Store simplifica à medida que a mutação direta se torna o comportamento padrão. Essa mudança remove a necessidade da função produce e torna createMutable obsoleto, permitindo que os desenvolvedores modifiquem rascunhos de store diretamente. O helper storePath permanece disponível para casos de uso legados específicos.
createEffect recebe uma grande refatoração, dividindo-se em duas funções distintas. A primeira, uma fase de 'computação' rastreada, define dependências. A segunda, uma fase de 'aplicação' não rastreada, executa o efeito colateral, recebendo o valor computado. Essa mudança arquitetural elimina o helper on e permite que a opção defer seja definida diretamente no efeito.
A limpeza de efeitos também evolui. A função apply agora retorna diretamente sua lógica de limpeza, simplificando o gerenciamento de recursos. onMount foi substituído por onSettled, que é disparado apenas após todas as operações assíncronas dentro de seu escopo terem sido resolvidas, retornando similarmente sua função de limpeza. A primitiva createComputed foi removida, com sua funcionalidade agora coberta por createMemo ou pelo novo efeito dividido.
A grande simplificação do JSX
O Solid 2.0 simplifica significativamente a sintaxe JSX, reduzindo idiomatismos específicos do framework. A prop classList foi removida por completo; a prop class agora aceita diretamente strings, objetos ou arrays. Isso permite um estilo condicional mais intuitivo e dinâmico, sem a necessidade de concatenação manual de strings ou manipulação de arrays.
O tratamento de atributos também se alinha mais ao HTML nativo. Os prefixos attr: e bool:, usados anteriormente para vinculação explícita de atributos e propriedades booleanas, não são mais necessários. Essa mudança padroniza a declaração de atributos, removendo uma camada de sintaxe específica do Solid para atributos HTML comuns.
Namespaces de manipulação de eventos, como on: e onCapture:, foram removidos. Os eventos agora são gerenciados usando props camelCase padrão, como onClick ou onInput, espelhando padrões convencionais de desenvolvimento web. A diretiva use: também foi substituída por ref callbacks empilháveis, fornecendo um método mais flexível e componível para comportamentos de elementos personalizados e hooks de ciclo de vida.
A renderização de listas recebeu uma simplificação. O componente dedicado Index não está mais disponível, com sua funcionalidade de lista não indexada agora integrada ao <For keyed={false}>. Além disso, um novo componente Repeat foi introduzido para otimizar a renderização baseada em contagem, fornecendo uma maneira declarativa de renderizar um bloco de JSX um número especificado de vezes. Saiba mais sobre essas e outras mudanças na postagem do blog Solid 2.0 RC: The Big <Reveal> - SolidJS.
Gostando do artigo? Receba um assim na sua caixa de entrada toda manhã.
um e-mail por dia · cancele em dois cliques · sem rastreadores de terceiros
O compilador que eliminou o meta-framework
O Solid 2 incorpora um novo compilador baseado em Rust, construído sobre o projeto de alto desempenho Oxc. Essa cadeia de ferramentas reengenheirada eleva significativamente o desempenho de build do framework. Benchmarks internos indicam velocidades de compilação variando de 20x a mais de 350x mais rápidas do que o compilador anterior do Solid 1 baseado em JavaScript, traduzindo-se diretamente em ciclos de desenvolvimento mais rápidos e builds de projeto mais eficientes.
O plugin Vite atualizado introduz um poderoso 'start mode', oferecendo aos desenvolvedores uma build de aplicação completa pronta para uso. Este modo suporta tanto a renderização apenas no cliente quanto recursos abrangentes de Server-Side Rendering (SSR). Ele integra recursos principais, como funções de servidor, diretamente nas ferramentas do framework, eliminando a necessidade de pacotes separados e simplificando a configuração do projeto para vários destinos de implantação.
Essas ferramentas integradas e poderosas tornam o meta-framework separado SolidStart redundante. As convenções estabelecidas do SolidStart, incluindo suas funções de servidor e camada de serviço, foram absorvidas diretamente no núcleo do Solid ou em seu plugin de compilador. Este movimento estratégico consolida o ecossistema de desenvolvimento, incorporando os padrões arquiteturais comprovados e os recursos full-stack do SolidStart diretamente no framework principal, simplificando a experiência geral do desenvolvedor.
Perguntas frequentes
Qual é a maior mudança no Solid 2.0?
A inovação principal é tornar as operações assíncronas um recurso de primeira classe do grafo reativo. Isso permite que computações retornem promises diretamente, eliminando a necessidade de primitivas especiais como createResource.
O SolidStart será descontinuado?
Sim, o SolidStart está sendo aposentado como um meta-framework separado. Seus principais recursos, como renderização no lado do servidor e funções de servidor, foram integrados diretamente ao plugin Vite do núcleo do Solid 2.0 por meio de um novo 'start mode'.
Como o Solid 2 lida com a busca de dados sem o createResource?
Computações como createMemo agora podem retornar promises diretamente. O sistema reativo entende e lida automaticamente com o estado assíncrono, simplificando a lógica de busca de dados e o código do componente.
O Solid 2 é mais rápido de compilar?
Sim, significativamente. O Solid 2 introduz uma nova cadeia de ferramentas de compilação escrita em Rust, que os benchmarks mostram ser mais de 20 vezes mais rápida, com alguns testes mostrando uma melhoria de velocidade de até 355x.
O que substitui o Suspense no Solid 2?
O limite Suspense foi substituído por Loading. O Loading renderiza um fallback apenas para a busca inicial de dados, enquanto buscas subsequentes podem ser rastreadas com isPending sem desmontar a interface de usuário existente.

