Quickstarters
Como Construir um Frontend Solid.js e Conectá-lo a um Backend
34 min
neste guia, você construirá um aplicativo de lista de tarefas usando solid js e o conectará a um backend robusto alimentado pelo back4app este tutorial é projetado como um ponto de partida ideal porque cobre operações crud fundamentais (criar, ler, atualizar, excluir) e orienta você na criação de uma interface de usuário clara e funcional ao final, você terá um aplicativo totalmente operacional que demonstra como integrar um serviço de backend gerenciado enquanto aproveita o solid js para um frontend responsivo desenvolver um aplicativo full stack pode ser desafiador devido às complexidades de configurar um backend, gerenciar um banco de dados, lidar com autenticação e implantar infraestrutura para simplificar esse processo, usamos o back4app, que oferece uma solução de backend como serviço (baas) , permitindo que você se concentre em criar seu frontend enquanto ele gerencia hospedagem, bancos de dados e apis o back4app fornece serviços de backend abrangentes, incluindo um banco de dados pronto para uso, autenticação, cloud code para lógica do lado do servidor e sdks para uma integração suave ele também suporta implantações em contêineres, tornando se uma escolha flexível para hospedar aplicativos full stack com essas ferramentas, você pode desenvolver e implantar aplicativos rapidamente sem se preocupar com a manutenção do servidor principais conclusões seguindo este tutorial, você aprenderá a inicializar um projeto moderno solid js usando vite integrar perfeitamente um serviço de backend para gerenciar os dados da sua aplicação implementar operações crud essenciais para uma interface de usuário dinâmica e interativa implantar uma aplicação lista de tarefas totalmente funcional usando fluxos de trabalho em contêiner no back4app pré requisitos certifique se de ter essas ferramentas e habilidades antes de começar node js e npm instale o node js (lts recomendado) de nodejs org https //nodejs org/ e verifique executando node v e npm v no seu terminal conhecimento básico de solid js familiaridade com componentes, sinais reativos (usando createsignal ) e sintaxe jsx é necessária se você é novo no solid js, considere revisar seus fundamentos primeiro uma conta no back4app inscreva se em back4app https //www back4app com/ para configurar e gerenciar seus serviços de backend com esses pré requisitos em vigor, você está pronto para configurar seu projeto e começar a construir configuração do projeto comece configurando seu ambiente de desenvolvimento local e inicializando seu projeto solid js usando vite para uma experiência de desenvolvimento rápida verifique se node js (versão lts) está instalado em sua máquina se necessário, baixe e instale a partir de nodejs org https //nodejs org/ confirme a instalação node v npm v inicialize seu projeto solid js usando vite execute o seguinte comando em seu terminal (substitua todo app pelo nome desejado do seu projeto) npm create vite\@latest todo app template solid mude para o diretório do seu projeto cd todo app instale todas as dependências necessárias npm install inicie o servidor de desenvolvimento para confirmar sua configuração npm run dev sua aplicação solid js deve estar rodando localmente agora abra a url exibida em seu navegador para verificar em seguida, você configurará seu backend no back4app para gerenciar o armazenamento de dados e as interações da api criando o backend todo back4app oferece um serviço de backend totalmente gerenciado alimentado por parse , fornecendo um banco de dados nosql, autenticação, cloud code e apis geradas automaticamente desde o início esta seção orienta você na criação de um modelo de dados de tarefa para armazenar os itens da sua lista de tarefas e vinculá lo ao seu frontend solid js configurando seu aplicativo backend faça login na sua painel do back4app https //www back4app com/ e clique em "criar um novo app " nomeie seu aplicativo (por exemplo, todosolidapp ) e escolha nodejs/parse como o tipo de backend uma vez que o app é criado, navegue até "banco de dados" > "navegador" clique em "criar uma classe" e selecione "personalizado" nomeie a classe tarefa e defina as permissões de nível de classe para permitir leitura e escrita públicas (você pode restringir essas configurações mais tarde) na classe tarefa adicione os seguintes campos título (string) – o título da tarefa descrição (string) – detalhes da tarefa concluído (booleano) – status indicando se a tarefa está finalizada datadevencimento (data) – prazo para a tarefa clique em "salvar" para finalizar seu esquema integrando o back4app com solid js integre o back4app ao seu projeto solid js usando o parse javascript sdk para se comunicar com seu backend instale o sdk via npm npm install parse configure o sdk inicializando o com seu application id e javascript key recupere esses dados no seu painel back4app em app settings > security & keys no seu src/index jsx (ou arquivo de entrada equivalente), importe e configure o parse da seguinte forma import { render } from "solid js/web"; import ' /index css' import app from " /app"; import parse from "parse/dist/parse min js"; const parse app id = 'your application id'; const parse js key = 'your javascript key'; const parse server url = 'https //parseapi back4app com/'; parse initialize(parse app id, parse js key); parse serverurl = parse server url; render(() => \<app />, document getelementbyid("root")); com o backend configurado, você está pronto para construir a interface do usuário da lista de tarefas em solid js e implementar operações crud desenvolvendo o frontend com solid js agora que seu backend está conectado, construa a interface do usuário para seu aplicativo de lista de tarefas usando solid js você criará componentes para adicionar, exibir, atualizar e excluir tarefas enquanto gerencia o estado com sinais reativos organizando seus componentes sua aplicação consistirá nesses componentes principais taskform jsx – gerencia a adição de novas tarefas tasklist jsx – exibe todas as tarefas e oferece controles para completá las ou removê las taskitem jsx – representa uma tarefa individual com ações para marcar como completa ou excluir crie uma components pasta dentro de src e adicione esses arquivos mkdir src/components touch src/components/taskform jsx src/components/tasklist jsx src/components/taskitem jsx gerenciando estado com solid js utilize o createsignal e createeffect do solid js para gerenciamento de estado e efeitos colaterais comece configurando o estado em app jsx import { createsignal, onmount } from "solid js"; import taskform from " /components/taskform"; import tasklist from " /components/tasklist"; import parse from "parse/dist/parse min js"; function app() { const \[tasks, settasks] = createsignal(\[]); const fetchtasks = async () => { try { const task = parse object extend("task"); const query = new parse query(task); const results = await query find(); settasks(results map(task => ({ id task id, task tojson() }))); } catch (error) { console error("error fetching tasks ", error); } }; onmount(fetchtasks); return ( \<div class="container"> \<h1>to do list\</h1> \<taskform fetchtasks={fetchtasks} /> \<tasklist tasks={tasks()} fetchtasks={fetchtasks} /> \</div> ); } export default app; construindo o componente do formulário de tarefas em taskform jsx , crie um formulário controlado para adicionar tarefas gerencie os valores de entrada com createsignal e envie os dados para o back4app import { createsignal } from "solid js"; import parse from "parse/dist/parse min js"; function taskform(props) { const \[title, settitle] = createsignal(""); const \[description, setdescription] = createsignal(""); const handlesubmit = async (e) => { e preventdefault(); try { const task = parse object extend("task"); const task = new task(); task set("title", title()); task set("description", description()); task set("completed", false); await task save(); props fetchtasks(); settitle(""); setdescription(""); } catch (error) { console error("error adding task ", error); } }; return ( \<form onsubmit={handlesubmit}> \<input type="text" placeholder="task title" value={title()} oninput={(e) => settitle(e target value)} required /> \<input type="text" placeholder="description" value={description()} oninput={(e) => setdescription(e target value)} required /> \<button type="submit">add task\</button> \</form> ); } export default taskform; exibindo a lista de tarefas em tasklist jsx , renderize a lista de tarefas usando o componente taskitem para cada entrada import taskitem from " /taskitem"; function tasklist(props) { return ( \<div> {props tasks length === 0 ? ( \<p>no tasks available\</p> ) ( props tasks map(task => ( \<taskitem key={task id} task={task} fetchtasks={props fetchtasks} /> )) )} \</div> ); } export default tasklist; criando o componente item de tarefa em taskitem jsx , configure ações para marcar uma tarefa como completa ou excluí la import parse from "parse/dist/parse min js"; function taskitem(props) { const handlecomplete = async () => { try { const query = new parse query("task"); const tasktoupdate = await query get(props task id); tasktoupdate set("completed", !props task completed); await tasktoupdate save(); props fetchtasks(); } catch (error) { console error("error updating task ", error); } }; const handledelete = async () => { try { const query = new parse query("task"); const tasktodelete = await query get(props task id); await tasktodelete destroy(); props fetchtasks(); } catch (error) { console error("error deleting task ", error); } }; return ( \<div class={`task item ${props task completed ? "completed" ""}`}> \<h3>{props task title}\</h3> \<p>{props task description}\</p> \<button onclick={handlecomplete}> {props task completed ? "undo" "complete"} \</button> \<button onclick={handledelete}>delete\</button> \</div> ); } export default taskitem; estilizando seu aplicativo adicione os seguintes estilos no index css arquivo na pasta src / center the content and add spacing / container { max width 600px; margin 40px auto; padding 0 20px; text align center; font family sans serif; } container h1 { margin bottom 20px; } form { display flex; flex direction column; align items center; gap 10px; margin bottom 20px; } form input\[type="text"] { width 80%; max width 400px; padding 8px; box sizing border box; font size 1rem; } form button { padding 8px 16px; cursor pointer; font size 1rem; border none; background color #eaeaea; transition background color 0 2s ease; } form button\ hover { background color #ccc; } container p { font size 1rem; } task item { display flex; flex direction column; align items center; justify content center; gap 12px; border 1px solid #ccc; border radius 6px; padding 15px; margin 10px 0; background color #fafafa; text align center; transition background color 0 2s ease; } task item completed h3, task item completed p { text decoration line through; color #888; } task item h3 { margin 0; font size 1 1rem; } task item p { margin 0; font size 1rem; } task item button { padding 6px 12px; border none; background color #eaeaea; cursor pointer; font size 0 9rem; } task item button\ hover { background color #ccc; } @media (min width 600px) { task item { flex direction row; } } importe o arquivo css no seu src/index jsx import " /index css"; finalizando a ui seu aplicativo de lista de tarefas solid js agora possui um frontend dinâmico integrado com back4app e estilo personalizado o aplicativo permite que você adicione, exiba, atualize e exclua tarefas enquanto mantém uma comunicação eficiente entre frontend e backend em seguida, você implantará seu aplicativo solid js usando a plataforma de implantação web do back4app implantando o frontend na implantação web do back4app a implantação web do back4app oferece um ambiente totalmente gerenciado e containerizado para implantar seus aplicativos com implantações baseadas em docker, você pode empacotar seu frontend solid js e implantá lo sem esforço configurando o vite para produção aplicações solid js construídas com vite rodam em modo de desenvolvimento por padrão para produção, construa uma versão estática e sirva a com um servidor web leve como o nginx atualize seu vite config js para definir o caminho base correto import { defineconfig } from 'vite'; import solidplugin from 'vite plugin solid'; export default defineconfig({ plugins \[solidplugin()], base ' /', // ensures correct asset paths in containerized environments }); gere arquivos prontos para produção npm run build criando um dockerfile para seu app crie um dockerfile na raiz do projeto para definir como seu aplicativo é containerizado \# use an official lightweight node js image to build the app from node 18 alpine as build workdir /app copy package json package lock json / run npm install copy run npm run build \# use nginx to serve the static files from nginx\ alpine \# copy custom nginx config for spa routing copy nginx conf /etc/nginx/conf d/default conf \# copy built app from build stage copy from=build /app/dist /usr/share/nginx/html expose 80 cmd \["nginx", " g", "daemon off;"] após criar seu dockerfile, configure o nginx para direcionar corretamente as solicitações para o arquivo index html raiz do seu aplicativo solid js quando você tentar acessar rotas diretamente para fazer isso, crie um nginx conf arquivo no diretório raiz do seu projeto e cole o bloco de código abaixo server { listen 80; server name localhost; root /usr/share/nginx/html; index index html; \# gzip settings for better performance gzip on; gzip vary on; gzip min length 10240; gzip proxied expired no cache no store private auth; gzip types text/plain text/css text/xml text/javascript application/x javascript application/xml application/javascript; gzip disable "msie \[1 6]\\ "; \# handle static file requests location \\ (?\ jpg|jpeg|gif|png|ico|svg|woff2|woff|eot|ttf|css|js)$ { expires 30d; add header cache control "public, max age=2592000"; try files $uri =404; } \# redirect all requests to index html for spa routing location / { try files $uri $uri/ /index html; } \# error pages error page 404 /index html; error page 500 502 503 504 /50x html; location = /50x html { root /usr/share/nginx/html; } } testando o contêiner localmente antes da implantação, construa e teste seu contêiner docker docker build t todo solid frontend execute o contêiner docker run p 8080 80 todo solid frontend visite http //localhost 8080 no seu navegador para confirmar que seu aplicativo está sendo servido corretamente fazendo push para o github e implantando via back4app envie seu projeto para o github git init git add git commit m "initial commit for back4app deployment" git branch m main git remote add origin \<your github repository url> git push u origin main em seguida, faça a implantação usando a implantação web do back4app faça login em implantação web do back4app https //www back4app com/containers clique em "criar novo app" , forneça um nome e selecione repositório github autorize o back4app a acessar seu repositório e selecione o todo solid repositório escolha implantação dockerfile e confirme as configurações de build clique em "implantar" para iniciar o processo de build monitoramento e gerenciamento de implantações após a implantação, use o painel do back4app para ver logs para depuração monitorar o desempenho do contêiner e o uso de recursos acionar novas implantações com novos commits configurar domínios personalizados, se desejado testando e depurando seu aplicativo uma vez implantado, teste seu aplicativo solid js minuciosamente verifique a conectividade da api abra o console de desenvolvedor do navegador (f12 → rede) para verificar chamadas de api durante as operações de tarefa adicionar e recuperar tarefas use a interface para adicionar tarefas, depois atualize e confirme a persistência de dados no navegador de banco de dados do back4app operações crud teste a marcação de tarefas como concluídas e a exclusão, garantindo que as atualizações sejam refletidas no backend lidar com casos limite valide as entradas do formulário e simule condições de rede mais lentas usando as ferramentas de desenvolvedor do navegador se surgirem problemas, consulte os logs do back4app ou revise sua configuração de api melhores práticas para usar os serviços do back4app melhore o desempenho e a segurança do seu aplicativo ao otimizar chamadas de api use solicitações em lote para múltiplas operações e selecione apenas os campos necessários nas consultas proteger variáveis de ambiente armazene credenciais sensíveis em variáveis de ambiente com vite, crie um env arquivo vite parse app id=your app id vite parse js key=your js key implementando auto scaling ative o auto scaling na implantação da web do back4app para cenários de alto tráfego aprimorando a segurança use permissões de nível de classe (clps) para restringir modificações de dados e configure acls conforme necessário aproveitando o cloud code desloque a lógica complexa para o cloud code para melhorar o desempenho e reduzir a exposição da api conclusão você agora construiu uma aplicação de lista de tarefas full stack usando solid js para o frontend e os robustos serviços de backend do back4app este tutorial cobriu a jornada desde a inicialização de um projeto solid js e a integração do parse sdk até a implantação do seu aplicativo por meio de fluxos de trabalho em contêiner no back4app à medida que você avança, considere adicionar recursos como autenticação avançada de usuários, atualizações em tempo real e integrações de terceiros para aprimorar ainda mais sua aplicação para mais detalhes e suporte, explore a documentação do back4app https //www back4app com/docs