[{"data":1,"prerenderedAt":1021},["ShallowReactive",2],{"tree":3,"i-lucide:book-open":1016},[4,127,244,356,463,529,676],{"path":5,"title":6,"description":7,"nav":8,"group":8,"version":8,"color":9,"colorDark":10,"order":11,"spell":12,"cover":13,"stem":14,"tomes":15},"\u002Fweb","Web","O que existe por baixo de qualquer framework: o navegador, o event loop, HTTP e cache, segurança por origem, Workers, tempo real, armazenamento, performance e as APIs que React e Vue embrulham.",null,"#8a6400","#f5cf3d",1,"lightning","#f2c418","web\u002Findex",[16],{"path":17,"title":18,"description":19,"nav":8,"group":8,"version":20,"color":8,"colorDark":8,"order":8,"spell":8,"cover":8,"stem":21,"chapters":22},"\u002Fweb\u002Fweb-por-dentro","Web por dentro","O que existe por baixo de qualquer framework: como o navegador transforma bytes em pixels, o event loop, HTTP e cache, o modelo de segurança por origem, threads com Workers, Service Workers, tempo real, armazenamento, performance e as APIs que React, Vue e companhia apenas embrulham.","Plataforma web · conceitos avançados","web\u002Fweb-por-dentro\u002Findex",[23,29,34,39,44,49,55,60,66,72,78,84,89,94,100,106,111,116,121],{"path":24,"title":25,"description":26,"nav":25,"group":27,"version":8,"color":8,"colorDark":8,"order":8,"spell":8,"cover":8,"stem":28},"\u002Fweb\u002Fweb-por-dentro\u002Fcomo-o-navegador-funciona","Como o navegador funciona","Processos isolados, a main thread que faz quase tudo, o caminho crítico de renderização (parse, style, layout, paint, composite) e o caminho da URL ao primeiro pixel.","Fundamentos","web\u002Fweb-por-dentro\u002F01.como-o-navegador-funciona",{"path":30,"title":31,"description":32,"nav":31,"group":27,"version":8,"color":8,"colorDark":8,"order":8,"spell":8,"cover":8,"stem":33},"\u002Fweb\u002Fweb-por-dentro\u002Fevent-loop","Event loop","Pilha de chamadas, tasks, microtasks, requestAnimationFrame e requestIdleCallback; por que microtasks podem travar a página e como dividir long tasks com scheduler.yield.","web\u002Fweb-por-dentro\u002F02.event-loop",{"path":35,"title":36,"description":37,"nav":36,"group":27,"version":8,"color":8,"colorDark":8,"order":8,"spell":8,"cover":8,"stem":38},"\u002Fweb\u002Fweb-por-dentro\u002Fhttp-em-profundidade","HTTP em profundidade","Métodos seguros e idempotentes, os códigos de status que importam, as diferenças entre HTTP\u002F1.1, HTTP\u002F2 e HTTP\u002F3, e compressão e negociação de conteúdo.","web\u002Fweb-por-dentro\u002F03.http-em-profundidade",{"path":40,"title":41,"description":42,"nav":41,"group":27,"version":8,"color":8,"colorDark":8,"order":8,"spell":8,"cover":8,"stem":43},"\u002Fweb\u002Fweb-por-dentro\u002Fcache-http","Cache HTTP","As diretivas de Cache-Control, revalidação condicional com ETag e 304, a estratégia padrão para HTML, assets com hash e APIs, e a armadilha do Vary.","web\u002Fweb-por-dentro\u002F04.cache-http",{"path":45,"title":46,"description":47,"nav":46,"group":27,"version":8,"color":8,"colorDark":8,"order":8,"spell":8,"cover":8,"stem":48},"\u002Fweb\u002Fweb-por-dentro\u002Forigem-e-seguranca","Origem e segurança","Same-origin policy, origem e site, CORS e preflight, atributos de cookie, XSS e Content Security Policy, CSRF e os outros cabeçalhos de segurança.","web\u002Fweb-por-dentro\u002F05.origem-e-seguranca",{"path":50,"title":51,"description":52,"nav":51,"group":53,"version":8,"color":8,"colorDark":8,"order":8,"spell":8,"cover":8,"stem":54},"\u002Fweb\u002Fweb-por-dentro\u002Fweb-workers","Web Workers","Threads de JavaScript sem DOM: dedicated, shared e service workers, worklets, structured clone, transferables, SharedArrayBuffer com Atomics e OffscreenCanvas.","Concorrência e tempo real","web\u002Fweb-por-dentro\u002F06.web-workers",{"path":56,"title":57,"description":58,"nav":57,"group":53,"version":8,"color":8,"colorDark":8,"order":8,"spell":8,"cover":8,"stem":59},"\u002Fweb\u002Fweb-por-dentro\u002Fservice-workers-e-pwa","Service Workers e PWA","O proxy de rede dentro do navegador: ciclo de vida (install, waiting, activate), estratégias de cache, manifest, push, background sync e as armadilhas de atualização.","web\u002Fweb-por-dentro\u002F07.service-workers-e-pwa",{"path":61,"title":62,"description":63,"nav":64,"group":53,"version":8,"color":8,"colorDark":8,"order":8,"spell":8,"cover":8,"stem":65},"\u002Fweb\u002Fweb-por-dentro\u002Ftempo-real","Tempo real: SSE, WebSocket e WebRTC","Polling, long polling, Server-Sent Events, WebSocket, WebTransport e WebRTC comparados; o formato do SSE, reconexão com backoff no WebSocket e o que WebRTC precisa para conectar navegadores.","Tempo real","web\u002Fweb-por-dentro\u002F08.tempo-real",{"path":67,"title":68,"description":69,"nav":70,"group":53,"version":8,"color":8,"colorDark":8,"order":8,"spell":8,"cover":8,"stem":71},"\u002Fweb\u002Fweb-por-dentro\u002Fcomunicacao-entre-contextos","Comunicação entre contextos","BroadcastChannel, postMessage entre janelas e iframes, MessageChannel, Web Locks e o evento storage: como abas, iframes e workers conversam.","Entre contextos","web\u002Fweb-por-dentro\u002F09.comunicacao-entre-contextos",{"path":73,"title":74,"description":75,"nav":76,"group":53,"version":8,"color":8,"colorDark":8,"order":8,"spell":8,"cover":8,"stem":77},"\u002Fweb\u002Fweb-por-dentro\u002Farmazenamento","Armazenamento no navegador","Cookies, localStorage, sessionStorage, IndexedDB, Cache API e OPFS comparados; cota, persistência e por que nada no navegador é garantido.","Armazenamento","web\u002Fweb-por-dentro\u002F10.armazenamento",{"path":79,"title":80,"description":81,"nav":80,"group":82,"version":8,"color":8,"colorDark":8,"order":8,"spell":8,"cover":8,"stem":83},"\u002Fweb\u002Fweb-por-dentro\u002Fcore-web-vitals","Core Web Vitals","LCP, INP e CLS: o que medem, os limites de bom, as causas comuns de nota ruim, e como medir em campo com PerformanceObserver e a biblioteca web-vitals.","Performance","web\u002Fweb-por-dentro\u002F11.core-web-vitals",{"path":85,"title":86,"description":87,"nav":86,"group":82,"version":8,"color":8,"colorDark":8,"order":8,"spell":8,"cover":8,"stem":88},"\u002Fweb\u002Fweb-por-dentro\u002Fcarregamento-de-recursos","Carregamento de recursos","script, defer, async e module; preconnect, preload, modulepreload, prefetch e fetchpriority; imagens responsivas, fontes, code splitting, Early Hints, Speculation Rules e bfcache.","web\u002Fweb-por-dentro\u002F12.carregamento-de-recursos",{"path":90,"title":91,"description":92,"nav":91,"group":82,"version":8,"color":8,"colorDark":8,"order":8,"spell":8,"cover":8,"stem":93},"\u002Fweb\u002Fweb-por-dentro\u002Frenderizacao-e-animacao","Renderização e animação","Layout thrashing e layout forçado, animar só no compositor com transform e opacity, contain e content-visibility, e a View Transition API.","web\u002Fweb-por-dentro\u002F13.renderizacao-e-animacao",{"path":95,"title":96,"description":97,"nav":96,"group":98,"version":8,"color":8,"colorDark":8,"order":8,"spell":8,"cover":8,"stem":99},"\u002Fweb\u002Fweb-por-dentro\u002Fobservers","Observers","IntersectionObserver, ResizeObserver, MutationObserver e PerformanceObserver: o navegador avisa quando algo relevante muda, sem escutar scroll e resize.","APIs da plataforma","web\u002Fweb-por-dentro\u002F14.observers",{"path":101,"title":102,"description":103,"nav":104,"group":98,"version":8,"color":8,"colorDark":8,"order":8,"spell":8,"cover":8,"stem":105},"\u002Fweb\u002Fweb-por-dentro\u002Ffetch-abort-e-streams","Fetch, AbortController e Streams","O que fetch rejeita e o que não, cancelar e combinar timeouts com AbortSignal, sendBeacon e keepalive, e ler respostas em streaming com ReadableStream.","Fetch e Streams","web\u002Fweb-por-dentro\u002F15.fetch-abort-e-streams",{"path":107,"title":108,"description":109,"nav":108,"group":98,"version":8,"color":8,"colorDark":8,"order":8,"spell":8,"cover":8,"stem":110},"\u002Fweb\u002Fweb-por-dentro\u002Fweb-components","Web Components","Custom Elements, Shadow DOM, template e slot; ciclo de vida do elemento, ::part, Declarative Shadow DOM, elementos associados a formulário e interoperabilidade com frameworks.","web\u002Fweb-por-dentro\u002F16.web-components",{"path":112,"title":113,"description":114,"nav":113,"group":98,"version":8,"color":8,"colorDark":8,"order":8,"spell":8,"cover":8,"stem":115},"\u002Fweb\u002Fweb-por-dentro\u002Foutras-apis-modernas","Outras APIs modernas","dialog, Popover, anchor positioning, Navigation API, WebAssembly, WebGPU, Passkeys, Clipboard, Web Share, Intl, Temporal, structuredClone e Page Visibility, e como checar o suporte com Baseline.","web\u002Fweb-por-dentro\u002F17.outras-apis-modernas",{"path":117,"title":118,"description":119,"nav":118,"group":98,"version":8,"color":8,"colorDark":8,"order":8,"spell":8,"cover":8,"stem":120},"\u002Fweb\u002Fweb-por-dentro\u002Fsemantica-e-acessibilidade","Semântica e acessibilidade","A árvore de acessibilidade, o elemento certo para cada coisa, a primeira regra do ARIA, foco, regiões aria-live, contraste e o atributo inert.","web\u002Fweb-por-dentro\u002F18.semantica-e-acessibilidade",{"path":122,"title":123,"description":124,"nav":123,"group":125,"version":8,"color":8,"colorDark":8,"order":8,"spell":8,"cover":8,"stem":126},"\u002Fweb\u002Fweb-por-dentro\u002Fperguntas-de-revisao","Perguntas de revisão","Perguntas para testar o tomo: event loop, compositor, cache, CORS, origem e site, CSP, Workers, SSE e WebSocket, armazenamento, INP, CLS e fetch.","Fechamento","web\u002Fweb-por-dentro\u002F19.perguntas-de-revisao",{"path":128,"title":129,"description":130,"nav":8,"group":8,"version":8,"color":131,"colorDark":132,"order":133,"spell":134,"cover":135,"stem":136,"tomes":137},"\u002Fvue","Vue","Como a reatividade do Vue rastreia dependências e decide o que renderizar de novo, e uma referência de toda a API nativa, com bancadas que rodam Vue de verdade.","#1f6b45","#6cc795",2,"plants","#1f4a33","vue\u002Findex",[138],{"path":139,"title":140,"description":141,"nav":8,"group":8,"version":142,"color":8,"colorDark":8,"order":8,"spell":8,"cover":8,"stem":143,"chapters":144},"\u002Fvue\u002Fvue-por-dentro","Vue por dentro","Como a reatividade do Vue rastreia dependências e decide o que renderizar de novo, uma referência de toda a API nativa (reatividade, ciclo de vida, macros do script setup, diretivas e componentes embutidos) e quatro temas para estudar a fundo: provide\u002Finject, Pinia, Web Workers e Server-Sent Events.","Vue 3.5 · revisão para dev pleno","vue\u002Fvue-por-dentro\u002Findex",[145,150,155,160,166,171,176,182,187,193,198,203,209,214,220,226,231,235,240],{"path":146,"title":147,"description":148,"nav":147,"group":27,"version":8,"color":8,"colorDark":8,"order":8,"spell":8,"cover":8,"stem":149},"\u002Fvue\u002Fvue-por-dentro\u002Fmodelo-mental","Modelo mental","No Vue, o próprio estado sabe quem o leu. Cada componente tem um efeito de render; enquanto ele roda, toda leitura de dado reativo vira dependência, e quando um desses dados muda só os efeitos que o leram são agendados.","vue\u002Fvue-por-dentro\u002F01.modelo-mental",{"path":151,"title":152,"description":153,"nav":152,"group":27,"version":8,"color":8,"colorDark":8,"order":8,"spell":8,"cover":8,"stem":154},"\u002Fvue\u002Fvue-por-dentro\u002Fcomo-a-reatividade-funciona","Como a reatividade funciona","Há duas formas de criar estado reativo: ref embrulha qualquer valor num objeto com .value; reactive devolve um Proxy profundo do objeto. O rastreamento acontece na leitura, e o DOM só muda no próximo tick.","vue\u002Fvue-por-dentro\u002F02.como-a-reatividade-funciona",{"path":156,"title":157,"description":158,"nav":157,"group":27,"version":8,"color":8,"colorDark":8,"order":8,"spell":8,"cover":8,"stem":159},"\u002Fvue\u002Fvue-por-dentro\u002Fo-que-causa-re-render","O que causa re-render","Um componente Vue renderiza de novo por exatamente três motivos: um dado reativo lido no render mudou, as props mudaram ou o conteúdo de slot dinâmico mudou. O pai renderizar não faz os filhos renderizarem.","vue\u002Fvue-por-dentro\u002F03.o-que-causa-re-render",{"path":161,"title":162,"description":163,"nav":162,"group":164,"version":8,"color":8,"colorDark":8,"order":8,"spell":8,"cover":8,"stem":165},"\u002Fvue\u002Fvue-por-dentro\u002Fmapa-da-api","Mapa da API","A API do Vue 3.5, agrupada como na referência oficial: reatividade, ciclo de vida, injeção de dependência, macros do script setup, template, componentes embutidos e API global.","Referência da API","vue\u002Fvue-por-dentro\u002F04.mapa-da-api",{"path":167,"title":168,"description":169,"nav":168,"group":164,"version":8,"color":8,"colorDark":8,"order":8,"spell":8,"cover":8,"stem":170},"\u002Fvue\u002Fvue-por-dentro\u002Fref-reactive-e-utilitarios","ref, reactive e utilitários","ref, reactive e readonly, os utilitários de leitura e conversão (toValue, toRef, toRefs), a reatividade rasa com shallowRef e triggerRef, customRef, toRaw e markRaw.","vue\u002Fvue-por-dentro\u002F05.ref-reactive-e-utilitarios",{"path":172,"title":173,"description":174,"nav":173,"group":164,"version":8,"color":8,"colorDark":8,"order":8,"spell":8,"cover":8,"stem":175},"\u002Fvue\u002Fvue-por-dentro\u002Fcomputed","computed","Um computed é um ref derivado e cacheado: rastreia o que lê no getter, só recalcula quando uma dependência muda e, mesmo assim, só quando alguém lê o valor.","vue\u002Fvue-por-dentro\u002F06.computed",{"path":177,"title":178,"description":179,"nav":180,"group":164,"version":8,"color":8,"colorDark":8,"order":8,"spell":8,"cover":8,"stem":181},"\u002Fvue\u002Fvue-por-dentro\u002Fwatch-e-watcheffect","watch, watchEffect e escopos","watch observa fontes explícitas e é preguiçoso; watchEffect roda na hora e rastreia tudo o que lê. Cleanup com onWatcherCleanup, flush, pause e stop, e os escopos de efeito.","watch e watchEffect","vue\u002Fvue-por-dentro\u002F07.watch-e-watcheffect",{"path":183,"title":184,"description":185,"nav":184,"group":164,"version":8,"color":8,"colorDark":8,"order":8,"spell":8,"cover":8,"stem":186},"\u002Fvue\u002Fvue-por-dentro\u002Fciclo-de-vida","Ciclo de vida","O setup roda uma vez por instância, antes de tudo; só a render function re-executa. Os hooks de ciclo de vida, quando cada um roda e para que servem.","vue\u002Fvue-por-dentro\u002F08.ciclo-de-vida",{"path":188,"title":189,"description":190,"nav":191,"group":164,"version":8,"color":8,"colorDark":8,"order":8,"spell":8,"cover":8,"stem":192},"\u002Fvue\u002Fvue-por-dentro\u002Fscript-setup-e-macros","\u003Cscript setup> e macros","script setup é açúcar de compilação: o conteúdo vira o corpo de setup() e tudo no topo fica disponível no template. As macros defineProps, defineEmits, defineModel e companhia, useTemplateRef, useId e atributos repassados.","script setup e macros","vue\u002Fvue-por-dentro\u002F09.script-setup-e-macros",{"path":194,"title":195,"description":196,"nav":195,"group":164,"version":8,"color":8,"colorDark":8,"order":8,"spell":8,"cover":8,"stem":197},"\u002Fvue\u002Fvue-por-dentro\u002Ftemplate-e-diretivas","Template e diretivas","Todas as diretivas do template (v-if, v-show, v-for, v-on, v-bind, v-model, v-slot, v-html, v-memo…), atributos e elementos especiais e diretivas customizadas.","vue\u002Fvue-por-dentro\u002F10.template-e-diretivas",{"path":199,"title":200,"description":201,"nav":200,"group":164,"version":8,"color":8,"colorDark":8,"order":8,"spell":8,"cover":8,"stem":202},"\u002Fvue\u002Fvue-por-dentro\u002Fcomponentes-embutidos","Componentes embutidos","Transition e TransitionGroup para animar entradas e saídas, KeepAlive para guardar instâncias em cache, Teleport para renderizar em outro ponto do DOM e Suspense (experimental).","vue\u002Fvue-por-dentro\u002F11.componentes-embutidos",{"path":204,"title":205,"description":206,"nav":207,"group":164,"version":8,"color":8,"colorDark":8,"order":8,"spell":8,"cover":8,"stem":208},"\u002Fvue\u002Fvue-por-dentro\u002Fapi-global-e-app","API global e da aplicação","createApp e a configuração do app (plugins, provide, componentes e diretivas globais, errorHandler), defineAsyncComponent com hidratação preguiçosa, defineComponent, h e defineCustomElement.","API global e app","vue\u002Fvue-por-dentro\u002F12.api-global-e-app",{"path":210,"title":211,"description":212,"nav":211,"group":164,"version":8,"color":8,"colorDark":8,"order":8,"spell":8,"cover":8,"stem":213},"\u002Fvue\u002Fvue-por-dentro\u002Fcss-no-sfc","CSS no SFC","style scoped e os seletores :deep, :slotted e :global, v-bind() no CSS ligado a estado reativo e CSS modules.","vue\u002Fvue-por-dentro\u002F13.css-no-sfc",{"path":215,"title":216,"description":217,"nav":218,"group":164,"version":8,"color":8,"colorDark":8,"order":8,"spell":8,"cover":8,"stem":219},"\u002Fvue\u002Fvue-por-dentro\u002Foptions-api","Options API em uma página","A Options API continua suportada e aparece em muito código legado. A tabela de equivalências com a Composition API, e por que composables venceram os mixins.","Options API","vue\u002Fvue-por-dentro\u002F14.options-api",{"path":221,"title":222,"description":223,"nav":222,"group":224,"version":8,"color":8,"colorDark":8,"order":8,"spell":8,"cover":8,"stem":225},"\u002Fvue\u002Fvue-por-dentro\u002Fprovide-inject","provide \u002F inject","O equivalente do Context do React: um ancestral fornece um valor e qualquer descendente o injeta. Se o valor é reativo, só quem lê o dado atualiza; o provider não precisa renderizar de novo.","Aprofundamento","vue\u002Fvue-por-dentro\u002F15.provide-inject",{"path":227,"title":228,"description":229,"nav":228,"group":224,"version":8,"color":8,"colorDark":8,"order":8,"spell":8,"cover":8,"stem":230},"\u002Fvue\u002Fvue-por-dentro\u002Fpinia","Pinia","Pinia é o gerenciador de estado oficial: estado reativo, getters e actions compartilhados pelo app inteiro, com DevTools, SSR e plugins. Setup stores, option stores, storeToRefs e $patch, $reset e $subscribe.","vue\u002Fvue-por-dentro\u002F16.pinia",{"path":232,"title":51,"description":233,"nav":51,"group":224,"version":8,"color":8,"colorDark":8,"order":8,"spell":8,"cover":8,"stem":234},"\u002Fvue\u002Fvue-por-dentro\u002Fweb-workers","O JavaScript da página roda numa única main thread; uma tarefa síncrona longa congela tudo. Um Worker é outra thread, sem DOM e sem Vue. Um composable useWorker com markRaw e shallowRef.","vue\u002Fvue-por-dentro\u002F17.web-workers",{"path":236,"title":237,"description":238,"nav":237,"group":224,"version":8,"color":8,"colorDark":8,"order":8,"spell":8,"cover":8,"stem":239},"\u002Fvue\u002Fvue-por-dentro\u002Fserver-sent-events","Server-Sent Events","SSE é um canal unidirecional do servidor para o cliente sobre HTTP comum. O foco aqui é a integração com a reatividade do Vue: um composable useEventSource que reconecta quando a URL muda.","vue\u002Fvue-por-dentro\u002F18.server-sent-events",{"path":241,"title":123,"description":242,"nav":123,"group":125,"version":8,"color":8,"colorDark":8,"order":8,"spell":8,"cover":8,"stem":243},"\u002Fvue\u002Fvue-por-dentro\u002Fperguntas-de-revisao","Tente responder antes de abrir.","vue\u002Fvue-por-dentro\u002F19.perguntas-de-revisao",{"path":245,"title":246,"description":247,"nav":8,"group":8,"version":8,"color":248,"colorDark":249,"order":250,"spell":251,"cover":252,"stem":253,"tomes":254},"\u002Freact","React","Como o React funciona por dentro: render, estado, efeitos, contexto e as ferramentas que tiram trabalho da main thread.","#19689a","#8fd0f5",3,"ice","#a3d6f2","react\u002Findex",[255],{"path":256,"title":257,"description":258,"nav":8,"group":8,"version":259,"color":8,"colorDark":8,"order":8,"spell":8,"cover":8,"stem":260,"chapters":261},"\u002Freact\u002Freact-por-dentro","React por dentro","O que acontece entre um setState e o pixel na tela, por que um componente renderiza de novo, uma referência de todos os hooks, componentes e APIs nativos do React 19.3, e quatro temas para estudar a fundo: Context API, useReducer, Web Workers e Server-Sent Events. Cada capítulo tem código e, onde ajuda, uma bancada que roda aqui mesmo.","React 19.3 · revisão para dev pleno","react\u002Freact-por-dentro\u002Findex",[262,267,272,276,280,285,291,297,302,308,313,319,324,330,335,340,345,349,353],{"path":263,"title":264,"description":265,"nav":264,"group":27,"version":8,"color":8,"colorDark":8,"order":8,"spell":8,"cover":8,"stem":266},"\u002Freact\u002Freact-por-dentro\u002Fmodelo-mental-e-fases","Modelo mental e fases","Um componente React é uma função que recebe dados e devolve uma descrição da interface (elementos React, objetos simples). Ele não mexe no DOM. Quem compara essa descrição com a anterior e aplica as mudanças é o React.","react\u002Freact-por-dentro\u002F01.modelo-mental-e-fases",{"path":268,"title":269,"description":270,"nav":269,"group":27,"version":8,"color":8,"colorDark":8,"order":8,"spell":8,"cover":8,"stem":271},"\u002Freact\u002Freact-por-dentro\u002Fcomo-o-estado-funciona","Como o estado funciona","O estado não mora na sua função. Ele fica guardado pelo React na fiber do componente, e os hooks são identificados pela ordem de chamada. É por isso que hooks não podem ficar dentro de if ou loops: a ordem precisa ser a mesma em todo render.","react\u002Freact-por-dentro\u002F02.como-o-estado-funciona",{"path":273,"title":157,"description":274,"nav":157,"group":27,"version":8,"color":8,"colorDark":8,"order":8,"spell":8,"cover":8,"stem":275},"\u002Freact\u002Freact-por-dentro\u002Fo-que-causa-re-render","Existem exatamente quatro motivos para um componente renderizar de novo:","react\u002Freact-por-dentro\u002F03.o-que-causa-re-render",{"path":277,"title":162,"description":278,"nav":162,"group":164,"version":8,"color":8,"colorDark":8,"order":8,"spell":8,"cover":8,"stem":279},"\u002Freact\u002Freact-por-dentro\u002Fmapa-da-api","Tudo o que o pacote react e o react-dom oferecem hoje (React 19.3), agrupado como na documentação oficial. Os capítulos seguintes detalham cada item com assinatura, exemplo e armadilhas.","react\u002Freact-por-dentro\u002F04.mapa-da-api",{"path":281,"title":282,"description":283,"nav":282,"group":164,"version":8,"color":8,"colorDark":8,"order":8,"spell":8,"cover":8,"stem":284},"\u002Freact\u002Freact-por-dentro\u002Fusestate-em-detalhe","useState em detalhe","O capítulo 02 cobriu o modelo mental (snapshot, batching, Object.is). Aqui ficam os detalhes da API que aparecem no dia a dia.","react\u002Freact-por-dentro\u002F05.usestate-em-detalhe",{"path":286,"title":287,"description":288,"nav":289,"group":164,"version":8,"color":8,"colorDark":8,"order":8,"spell":8,"cover":8,"stem":290},"\u002Freact\u002Freact-por-dentro\u002Fefeitos","Efeitos: useEffect e família","Efeitos servem para sincronizar o componente com algo fora do React: conexões, timers, assinaturas, APIs do navegador, widgets de outras bibliotecas. A documentação chama efeitos de \"saída de emergência\": se não há sistema externo envolvido, você provavelmente não precisa de um.","Efeitos","react\u002Freact-por-dentro\u002F06.efeitos",{"path":292,"title":293,"description":294,"nav":295,"group":164,"version":8,"color":8,"colorDark":8,"order":8,"spell":8,"cover":8,"stem":296},"\u002Freact\u002Freact-por-dentro\u002Frefs","Refs: useRef, ref e useImperativeHandle","Uma ref é uma caixa { current } que o React guarda entre renders. Mudar ref.current não causa render, e o valor é o mesmo objeto durante toda a vida do componente. Use para o que não aparece na tela: nós do DOM, IDs de timer, instâncias (Worker, EventSource, player), o valor anterior de algo.","Refs","react\u002Freact-por-dentro\u002F07.refs",{"path":298,"title":299,"description":300,"nav":82,"group":164,"version":8,"color":8,"colorDark":8,"order":8,"spell":8,"cover":8,"stem":301},"\u002Freact\u002Freact-por-dentro\u002Fperformance","Performance: memo, transições e valores adiados","Guarda o resultado entre renders e só recalcula quando uma dependência muda. Dois usos legítimos: cálculo caro (filtrar ou ordenar milhares de itens) e estabilizar uma referência passada para um filho com memo ou usada como dependência de efeito. É uma otimização, não uma garantia: o React pode descartar o cache.","react\u002Freact-por-dentro\u002F08.performance",{"path":303,"title":304,"description":305,"nav":306,"group":164,"version":8,"color":8,"colorDark":8,"order":8,"spell":8,"cover":8,"stem":307},"\u002Freact\u002Freact-por-dentro\u002Fuse-suspense-e-lazy","use, Suspense, lazy e erros","use lê um recurso. Com uma Promise, o componente suspende até ela resolver e o \u003CSuspense> mais próximo mostra o fallback; se ela rejeitar, o Error Boundary mais próximo assume. Com um contexto, funciona como useContext. Diferente dos outros hooks, pode ser chamado dentro de if e loops.","use, Suspense e lazy","react\u002Freact-por-dentro\u002F09.use-suspense-e-lazy",{"path":309,"title":310,"description":311,"nav":310,"group":164,"version":8,"color":8,"colorDark":8,"order":8,"spell":8,"cover":8,"stem":312},"\u002Freact\u002Freact-por-dentro\u002Fformularios-e-actions","Formulários e Actions","O React 19 trouxe Actions: funções (normalmente assíncronas) passadas para \u003Cform action>, formAction de botões ou startTransition. O React cuida do estado pendente, dos erros e das atualizações otimistas, e reseta o formulário não controlado depois do sucesso.","react\u002Freact-por-dentro\u002F10.formularios-e-actions",{"path":314,"title":315,"description":316,"nav":317,"group":164,"version":8,"color":8,"colorDark":8,"order":8,"spell":8,"cover":8,"stem":318},"\u002Freact\u002Freact-por-dentro\u002Fuseid-stores-e-hooks-proprios","useId, useSyncExternalStore e hooks customizados","Gera um ID único por instância do componente e igual no servidor e no cliente, o que evita erros de hidratação. Use para ligar \u003Clabel htmlFor>, aria-describedby e afins. Não use como key de lista: keys vêm dos dados.","useId, stores, hooks próprios","react\u002Freact-por-dentro\u002F11.useid-stores-e-hooks-proprios",{"path":320,"title":321,"description":322,"nav":321,"group":164,"version":8,"color":8,"colorDark":8,"order":8,"spell":8,"cover":8,"stem":323},"\u002Freact\u002Freact-por-dentro\u002Fcomponentes-nativos","Componentes nativos","Agrupa elementos sem adicionar nó ao DOM. A forma curta \u003C>…\u003C\u002F> não aceita props; use \u003CFragment key={id}> em listas. Desde o 19.3, também aceita ref.","react\u002Freact-por-dentro\u002F12.componentes-nativos",{"path":325,"title":326,"description":327,"nav":328,"group":164,"version":8,"color":8,"colorDark":8,"order":8,"spell":8,"cover":8,"stem":329},"\u002Freact\u002Freact-por-dentro\u002Freact-dom","react-dom e APIs de suporte","Renderiza filhos em outro lugar do DOM (modais, toasts, tooltips fora de um container com overflow: hidden). O portal continua sendo filho na árvore do React: recebe contexto do pai e eventos sobem pela árvore do React, não pela do DOM.","react-dom","react\u002Freact-por-dentro\u002F13.react-dom",{"path":331,"title":332,"description":333,"nav":332,"group":164,"version":8,"color":8,"colorDark":8,"order":8,"spell":8,"cover":8,"stem":334},"\u002Freact\u002Freact-por-dentro\u002Fregras-do-react","Regras do React","As regras abaixo não são estilo: o React (e o React Compiler) assumem que elas valem para poder renderizar em qualquer ordem, interromper, repetir e memoizar. O eslint-plugin-react-hooks detecta a maioria das violações.","react\u002Freact-por-dentro\u002F14.regras-do-react",{"path":336,"title":337,"description":338,"nav":337,"group":224,"version":8,"color":8,"colorDark":8,"order":8,"spell":8,"cover":8,"stem":339},"\u002Freact\u002Freact-por-dentro\u002Fcontext-api","Context API","Context resolve prop drilling: disponibilizar um valor para qualquer descendente sem passar por cada nível. Ele é um mecanismo de injeção de dependência, não um gerenciador de estado. O estado continua vivendo em um useState ou useReducer no Provider; o contexto só transporta.","react\u002Freact-por-dentro\u002F15.context-api",{"path":341,"title":342,"description":343,"nav":342,"group":224,"version":8,"color":8,"colorDark":8,"order":8,"spell":8,"cover":8,"stem":344},"\u002Freact\u002Freact-por-dentro\u002Fusereducer","useReducer","useReducer troca \"como mudar o estado\" espalhado em handlers por uma função central (estado, ação) => novoEstado. Os componentes passam a descrever o que aconteceu (dispatch({ type: 'item_adicionado' })) e o reducer decide como o estado muda.","react\u002Freact-por-dentro\u002F16.usereducer",{"path":346,"title":51,"description":347,"nav":51,"group":224,"version":8,"color":8,"colorDark":8,"order":8,"spell":8,"cover":8,"stem":348},"\u002Freact\u002Freact-por-dentro\u002Fweb-workers","O JavaScript da página roda em uma única main thread, que também processa eventos, executa o render do React, calcula layout e pinta. Uma tarefa síncrona longa (acima de ~50 ms, o limite de \"long task\") congela tudo isso: cliques não respondem e animações em JS param.","react\u002Freact-por-dentro\u002F17.web-workers",{"path":350,"title":237,"description":351,"nav":237,"group":224,"version":8,"color":8,"colorDark":8,"order":8,"spell":8,"cover":8,"stem":352},"\u002Freact\u002Freact-por-dentro\u002Fserver-sent-events","SSE é um canal unidirecional, do servidor para o cliente, sobre uma requisição HTTP comum que nunca termina. O servidor responde com Content-Type: text\u002Fevent-stream e vai escrevendo blocos de texto. O navegador oferece a API EventSource, que já faz parsing, reconexão automática e retomada a partir do último ID recebido. É o que muitas APIs de LLM usam para enviar tokens em streaming.","react\u002Freact-por-dentro\u002F18.server-sent-events",{"path":354,"title":123,"description":242,"nav":123,"group":125,"version":8,"color":8,"colorDark":8,"order":8,"spell":8,"cover":8,"stem":355},"\u002Freact\u002Freact-por-dentro\u002Fperguntas-de-revisao","react\u002Freact-por-dentro\u002F19.perguntas-de-revisao",{"path":357,"title":358,"description":359,"nav":8,"group":8,"version":8,"color":360,"colorDark":361,"order":362,"spell":363,"cover":364,"stem":365,"tomes":366},"\u002Fnuxt","Nuxt","O framework em volta do Vue: renderização no servidor e hidratação, rotas por arquivo, busca de dados ciente de SSR e um servidor próprio, o Nitro.","#3b7a12","#a3e86b",4,"acid","#8fd957","nuxt\u002Findex",[367],{"path":368,"title":369,"description":370,"nav":8,"group":8,"version":371,"color":8,"colorDark":8,"order":8,"spell":8,"cover":8,"stem":372,"chapters":373},"\u002Fnuxt\u002Fnuxt-por-dentro","Nuxt por dentro","O que acontece entre a requisição e a página interativa: onde cada linha de código roda, como os dados viajam do servidor para o cliente sem buscar duas vezes, como misturar estático, cache e SSR por rota, e uma referência de todos os composables, componentes e utilitários do framework.","Nuxt 4.6 · revisão para dev pleno","nuxt\u002Fnuxt-por-dentro\u002Findex",[374,380,386,391,396,400,405,410,416,420,425,430,435,441,446,452,456,460],{"path":375,"title":376,"description":377,"nav":378,"group":27,"version":8,"color":8,"colorDark":8,"order":8,"spell":8,"cover":8,"stem":379},"\u002Fnuxt\u002Fnuxt-por-dentro\u002Fo-que-o-nuxt-adiciona","O que o Nuxt adiciona ao Vue","Vue cuida da interface. O Nuxt é o framework em volta, como o Next é para o React: SSR com hidratação, rotas por arquivo, o servidor Nitro, busca de dados ciente de SSR, auto-imports e módulos.","O que o Nuxt adiciona","nuxt\u002Fnuxt-por-dentro\u002F01.o-que-o-nuxt-adiciona",{"path":381,"title":382,"description":383,"nav":384,"group":27,"version":8,"color":8,"colorDark":8,"order":8,"spell":8,"cover":8,"stem":385},"\u002Fnuxt\u002Fnuxt-por-dentro\u002Festrutura-e-auto-imports","Estrutura de diretórios e auto-imports","No Nuxt 4, o código da aplicação Vue fica em app\u002F, separado do servidor (server\u002F) e do código compartilhado entre os dois (shared\u002F). Cada pasta tem um papel que o Nuxt reconhece pelo nome.","Estrutura e auto-imports","nuxt\u002Fnuxt-por-dentro\u002F02.estrutura-e-auto-imports",{"path":387,"title":388,"description":389,"nav":388,"group":27,"version":8,"color":8,"colorDark":8,"order":8,"spell":8,"cover":8,"stem":390},"\u002Fnuxt\u002Fnuxt-por-dentro\u002Frenderizacao-e-hidratacao","Renderização e hidratação","O modo padrão é a renderização universal: o servidor executa o app Vue, gera o HTML completo e o envia com o payload; no navegador, o Vue hidrata esse HTML e reaproveita o payload em vez de buscar tudo de novo.","nuxt\u002Fnuxt-por-dentro\u002F03.renderizacao-e-hidratacao",{"path":392,"title":393,"description":394,"nav":393,"group":27,"version":8,"color":8,"colorDark":8,"order":8,"spell":8,"cover":8,"stem":395},"\u002Fnuxt\u002Fnuxt-por-dentro\u002Frotas-layouts-e-middleware","Rotas, layouts e middleware","Cada arquivo em app\u002Fpages vira uma rota; definePageMeta configura layout, middleware e validação; NuxtLink e navigateTo navegam; layouts e middleware de rota envolvem as páginas.","nuxt\u002Fnuxt-por-dentro\u002F04.rotas-layouts-e-middleware",{"path":397,"title":162,"description":398,"nav":162,"group":164,"version":8,"color":8,"colorDark":8,"order":8,"spell":8,"cover":8,"stem":399},"\u002Fnuxt\u002Fnuxt-por-dentro\u002Fmapa-da-api","Tudo o que o Nuxt 4 oferece, agrupado como na documentação oficial: composables de dados, estado, app e SEO, componentes, utilitários e o servidor Nitro. Tudo é auto-importado.","nuxt\u002Fnuxt-por-dentro\u002F05.mapa-da-api",{"path":401,"title":402,"description":403,"nav":402,"group":164,"version":8,"color":8,"colorDark":8,"order":8,"spell":8,"cover":8,"stem":404},"\u002Fnuxt\u002Fnuxt-por-dentro\u002Fbusca-de-dados","Busca de dados","Três ferramentas, três papéis: useFetch para buscar uma URL no setup com payload, useAsyncData para qualquer função assíncrona e $fetch para ações do usuário e handlers do servidor.","nuxt\u002Fnuxt-por-dentro\u002F06.busca-de-dados",{"path":406,"title":407,"description":408,"nav":407,"group":164,"version":8,"color":8,"colorDark":8,"order":8,"spell":8,"cover":8,"stem":409},"\u002Fnuxt\u002Fnuxt-por-dentro\u002Festado-e-cookies","Estado e cookies","useState é um ref compartilhado por chave e seguro para SSR; useCookie é um ref ligado a um cookie, lido e escrito no servidor e no cliente.","nuxt\u002Fnuxt-por-dentro\u002F07.estado-e-cookies",{"path":411,"title":412,"description":413,"nav":414,"group":164,"version":8,"color":8,"colorDark":8,"order":8,"spell":8,"cover":8,"stem":415},"\u002Fnuxt\u002Fnuxt-por-dentro\u002Fcomposables-de-app","Composables de app, requisição e SEO","useNuxtApp, useRuntimeConfig e useAppConfig, head e SEO, dados da requisição e da resposta no SSR, erros e os composables menores.","Composables de app","nuxt\u002Fnuxt-por-dentro\u002F08.composables-de-app",{"path":417,"title":321,"description":418,"nav":321,"group":164,"version":8,"color":8,"colorDark":8,"order":8,"spell":8,"cover":8,"stem":419},"\u002Fnuxt\u002Fnuxt-por-dentro\u002Fcomponentes-nativos","NuxtPage, NuxtLayout, NuxtLink, ClientOnly, NuxtErrorBoundary, NuxtTime e os demais componentes do framework, e a hidratação preguiçosa com o prefixo Lazy e os atributos hydrate-*.","nuxt\u002Fnuxt-por-dentro\u002F09.componentes-nativos",{"path":421,"title":422,"description":423,"nav":422,"group":164,"version":8,"color":8,"colorDark":8,"order":8,"spell":8,"cover":8,"stem":424},"\u002Fnuxt\u002Fnuxt-por-dentro\u002Futilitarios","Utilitários","Plugins com defineNuxtPlugin, execução única com callOnce e a tabela dos demais utilitários: navegação, middleware, invalidação de dados e estado, pré-carregamento e ciclo do app.","nuxt\u002Fnuxt-por-dentro\u002F10.utilitarios",{"path":426,"title":427,"description":428,"nav":427,"group":164,"version":8,"color":8,"colorDark":8,"order":8,"spell":8,"cover":8,"stem":429},"\u002Fnuxt\u002Fnuxt-por-dentro\u002Fnuxt-config-e-app-config","nuxt.config e app.config","Um nuxt.config comentado com as opções que mais aparecem, mais layers, configuração por ambiente e hooks de build.","nuxt\u002Fnuxt-por-dentro\u002F11.nuxt-config-e-app-config",{"path":431,"title":432,"description":433,"nav":432,"group":164,"version":8,"color":8,"colorDark":8,"order":8,"spell":8,"cover":8,"stem":434},"\u002Fnuxt\u002Fnuxt-por-dentro\u002Fservidor-com-nitro","Servidor com Nitro","Arquivos em server\u002Fapi\u002F viram endpoints em \u002Fapi\u002F; o sufixo define o método e colchetes criam parâmetros. Cada arquivo exporta um handler h3, tipado até o $fetch do cliente.","nuxt\u002Fnuxt-por-dentro\u002F12.servidor-com-nitro",{"path":436,"title":437,"description":438,"nav":439,"group":164,"version":8,"color":8,"colorDark":8,"order":8,"spell":8,"cover":8,"stem":440},"\u002Fnuxt\u002Fnuxt-por-dentro\u002Fmodulos-e-plugins","Módulos e plugins do ecossistema","Módulos estendem o build: adicionam componentes, composables, rotas de servidor e configuração. Os mais usados e um módulo local mínimo.","Módulos e plugins","nuxt\u002Fnuxt-por-dentro\u002F13.modulos-e-plugins",{"path":442,"title":443,"description":444,"nav":443,"group":224,"version":8,"color":8,"colorDark":8,"order":8,"spell":8,"cover":8,"stem":445},"\u002Fnuxt\u002Fnuxt-por-dentro\u002Festado-no-ssr-e-pinia","Estado no SSR e Pinia","No Nuxt, o mesmo código roda num servidor que atende muitos usuários ao mesmo tempo, e o estado do servidor precisa chegar ao cliente. Isso impõe três regras: estado por requisição, transferência pelo payload e inicialização única.","nuxt\u002Fnuxt-por-dentro\u002F14.estado-no-ssr-e-pinia",{"path":447,"title":448,"description":449,"nav":450,"group":224,"version":8,"color":8,"colorDark":8,"order":8,"spell":8,"cover":8,"stem":451},"\u002Fnuxt\u002Fnuxt-por-dentro\u002Fautenticacao","Autenticação e proteção de rotas","Proteção em camadas, da mais importante para a mais cosmética: rotas de servidor que verificam a sessão, sessão em cookie httpOnly e middleware de rota para a experiência.","Autenticação","nuxt\u002Fnuxt-por-dentro\u002F15.autenticacao",{"path":453,"title":51,"description":454,"nav":51,"group":224,"version":8,"color":8,"colorDark":8,"order":8,"spell":8,"cover":8,"stem":455},"\u002Fnuxt\u002Fnuxt-por-dentro\u002Fweb-workers","Workers são uma API do navegador: no Nuxt, a regra extra é criá-los só no cliente, porque o setup roda também no servidor, onde Worker não existe.","nuxt\u002Fnuxt-por-dentro\u002F16.web-workers",{"path":457,"title":237,"description":458,"nav":237,"group":224,"version":8,"color":8,"colorDark":8,"order":8,"spell":8,"cover":8,"stem":459},"\u002Fnuxt\u002Fnuxt-por-dentro\u002Fserver-sent-events","Com o Nitro, o servidor e o cliente do stream ficam no mesmo projeto. O h3 oferece createEventStream, que cuida dos headers, do formato text\u002Fevent-stream e do fechamento.","nuxt\u002Fnuxt-por-dentro\u002F17.server-sent-events",{"path":461,"title":123,"description":242,"nav":123,"group":125,"version":8,"color":8,"colorDark":8,"order":8,"spell":8,"cover":8,"stem":462},"\u002Fnuxt\u002Fnuxt-por-dentro\u002Fperguntas-de-revisao","nuxt\u002Fnuxt-por-dentro\u002F18.perguntas-de-revisao",{"path":464,"title":465,"description":466,"nav":8,"group":8,"version":8,"color":467,"colorDark":468,"order":469,"spell":470,"cover":471,"stem":472,"tomes":473},"\u002Fnext","Next.js","Como o Next transforma componentes React em páginas servidas por rota: servidor e cliente, renderização estática e dinâmica, cache e mutações.","#5c5c58","#d2d2ce",5,"smoke","#cfcfcb","next\u002Findex",[474],{"path":475,"title":476,"description":477,"nav":8,"group":8,"version":478,"color":8,"colorDark":8,"order":8,"spell":8,"cover":8,"stem":479,"chapters":480},"\u002Fnext\u002Fnext-por-dentro","Next.js por dentro","Como o Next transforma componentes React em páginas servidas por rota: o que roda no servidor e o que vai para o navegador, quando uma página é estática ou dinâmica, como o cache funciona no modelo novo e como mutar dados com segurança.","16.4 · React 19.3 · App Router e Cache Components","next\u002Fnext-por-dentro\u002Findex",[481,487,492,497,502,506,511,516,522,526],{"path":482,"title":483,"description":484,"nav":485,"group":27,"version":8,"color":8,"colorDark":8,"order":8,"spell":8,"cover":8,"stem":486},"\u002Fnext\u002Fnext-por-dentro\u002Fo-que-o-next-adiciona","O que o Next adiciona ao React","React descreve interface. Ele não decide como as URLs viram telas, onde o código roda, como os dados chegam nem como a página é entregue. O Next é o framework que responde essas perguntas:","O que o Next adiciona","next\u002Fnext-por-dentro\u002F01.o-que-o-next-adiciona",{"path":488,"title":489,"description":490,"nav":489,"group":27,"version":8,"color":8,"colorDark":8,"order":8,"spell":8,"cover":8,"stem":491},"\u002Fnext\u002Fnext-por-dentro\u002Froteamento-por-arquivos","Roteamento por arquivos","Cada pasta dentro de app\u002F é um segmento da URL. Uma pasta só vira rota pública quando tem um page.tsx (UI) ou um route.ts (endpoint HTTP). Os outros arquivos especiais envolvem a página em camadas.","next\u002Fnext-por-dentro\u002F02.roteamento-por-arquivos",{"path":493,"title":494,"description":495,"nav":494,"group":27,"version":8,"color":8,"colorDark":8,"order":8,"spell":8,"cover":8,"stem":496},"\u002Fnext\u002Fnext-por-dentro\u002Fserver-e-client-components","Server e Client Components","No App Router, todo componente é Server Component por padrão. Ele roda no servidor (no build ou por requisição), pode ser async, acessa banco, sistema de arquivos e segredos, e seu código nunca vai para o navegador. O resultado não é HTML puro, é o RSC payload: uma descrição serializada da árvore que o React no cliente sabe montar.","next\u002Fnext-por-dentro\u002F03.server-e-client-components",{"path":498,"title":499,"description":500,"nav":499,"group":27,"version":8,"color":8,"colorDark":8,"order":8,"spell":8,"cover":8,"stem":501},"\u002Fnext\u002Fnext-por-dentro\u002Frenderizacao-e-streaming","Renderização e streaming","Toda rota é renderizada em um de dois momentos: antes (pré-renderização no build ou em revalidação, servida como arquivo estático) ou na requisição (por usuário). O que decide é o que o código acessa:","next\u002Fnext-por-dentro\u002F04.renderizacao-e-streaming",{"path":503,"title":402,"description":504,"nav":402,"group":224,"version":8,"color":8,"colorDark":8,"order":8,"spell":8,"cover":8,"stem":505},"\u002Fnext\u002Fnext-por-dentro\u002Fbusca-de-dados","Server Components buscam dados direto, sem API intermediária: await db.query(...) ou await fetch(...) no corpo do componente. As regras que importam são sobre evitar cascatas e não buscar duas vezes.","next\u002Fnext-por-dentro\u002F05.busca-de-dados",{"path":507,"title":508,"description":509,"nav":508,"group":224,"version":8,"color":8,"colorDark":8,"order":8,"spell":8,"cover":8,"stem":510},"\u002Fnext\u002Fnext-por-dentro\u002Fcache-components","Cache Components","Com cacheComponents: true, a regra fica simples: nada é cacheado implicitamente. Todo código dinâmico roda na requisição, e você marca explicitamente o que pode ser reaproveitado com 'use cache'. Pense na diretiva como um Cache-Control no nível do componente ou da função.","next\u002Fnext-por-dentro\u002F06.cache-components",{"path":512,"title":513,"description":514,"nav":513,"group":224,"version":8,"color":8,"colorDark":8,"order":8,"spell":8,"cover":8,"stem":515},"\u002Fnext\u002Fnext-por-dentro\u002Fserver-actions","Server Actions","Uma função async marcada com 'use server' pode ser chamada pelo cliente como se fosse local. Por baixo, o Next cria um endpoint POST, serializa os argumentos, executa no servidor e devolve o resultado junto com o RSC payload atualizado. Funciona até sem JavaScript quando usada em \u003Cform action> (progressive enhancement).","next\u002Fnext-por-dentro\u002F07.server-actions",{"path":517,"title":518,"description":519,"nav":520,"group":224,"version":8,"color":8,"colorDark":8,"order":8,"spell":8,"cover":8,"stem":521},"\u002Fnext\u002Fnext-por-dentro\u002Froute-handlers-e-proxy","Route Handlers e proxy.ts","Route Handlers (route.ts) são endpoints HTTP usando as APIs padrão da web, Request e Response. Use para webhooks, APIs consumidas por terceiros ou apps móveis, downloads e streams. Para o seu próprio front-end, Server Components (leitura) e Server Actions (escrita) normalmente dispensam uma API.","Route Handlers e proxy","next\u002Fnext-por-dentro\u002F08.route-handlers-e-proxy",{"path":523,"title":524,"description":524,"nav":524,"group":224,"version":8,"color":8,"colorDark":8,"order":8,"spell":8,"cover":8,"stem":525},"\u002Fnext\u002Fnext-por-dentro\u002Fotimizacoes-embutidas","Otimizações embutidas","next\u002Fnext-por-dentro\u002F09.otimizacoes-embutidas",{"path":527,"title":123,"description":242,"nav":123,"group":125,"version":8,"color":8,"colorDark":8,"order":8,"spell":8,"cover":8,"stem":528},"\u002Fnext\u002Fnext-por-dentro\u002Fperguntas-de-revisao","next\u002Fnext-por-dentro\u002F10.perguntas-de-revisao",{"path":530,"title":531,"description":532,"nav":8,"group":8,"version":8,"color":533,"colorDark":534,"order":535,"spell":536,"cover":537,"stem":538,"tomes":539},"\u002Fsql","SQL","SQL no PostgreSQL do básico ao avançado: ordem de execução, texto e datas, JOINs e janelas, transações e MVCC, locks, índices por dentro, planos de execução, monitoramento, busca textual e operação.","#454c56","#b3bcc7",6,"rock","#3a3e44","sql\u002Findex",[540],{"path":541,"title":542,"description":543,"nav":8,"group":8,"version":544,"color":8,"colorDark":8,"order":8,"spell":8,"cover":8,"stem":545,"chapters":546},"\u002Fsql\u002Fsql-por-dentro","SQL por dentro","Da primeira consulta ao que separa quem usa banco de quem entende banco: a ordem em que o SQL é avaliado, texto e datas sem armadilhas, JOINs e janelas, transações e MVCC, locks, como cada tipo de índice funciona por dentro, planos de execução, as views que mostram o que o servidor está fazendo, busca textual, trigramas e o que manter em dia para o banco aguentar produção.","PostgreSQL 18 · do básico ao avançado","sql\u002Fsql-por-dentro\u002Findex",[547,553,558,563,568,573,578,583,588,593,598,604,610,615,620,625,631,636,642,647,652,657,662,667,672],{"path":548,"title":549,"description":550,"nav":551,"group":27,"version":8,"color":8,"colorDark":8,"order":8,"spell":8,"cover":8,"stem":552},"\u002Fsql\u002Fsql-por-dentro\u002Fmodelo-relacional-e-ordem-de-execucao","Modelo relacional e ordem de execução","Tabelas, chaves e o planejador; cluster, database e schema; comandos do psql; e a ordem lógica em que um SELECT é avaliado, que explica por que um alias não funciona no WHERE.","Modelo e ordem de execução","sql\u002Fsql-por-dentro\u002F01.modelo-relacional-e-ordem-de-execucao",{"path":554,"title":555,"description":556,"nav":555,"group":27,"version":8,"color":8,"colorDark":8,"order":8,"spell":8,"cover":8,"stem":557},"\u002Fsql\u002Fsql-por-dentro\u002Ftipos-de-dados","Tipos de dados","Que tipo usar para inteiros, dinheiro, texto, datas, UUID, JSON, arrays, ranges e enums; identity e uuidv7, colunas geradas e conversões.","sql\u002Fsql-por-dentro\u002F02.tipos-de-dados",{"path":559,"title":560,"description":561,"nav":560,"group":27,"version":8,"color":8,"colorDark":8,"order":8,"spell":8,"cover":8,"stem":562},"\u002Fsql\u002Fsql-por-dentro\u002Ftabelas-e-restricoes","Tabelas e restrições","Chaves primárias e estrangeiras, CHECK, UNIQUE, ON DELETE, unicidade parcial, EXCLUDE, chaves temporais e como alterar tabelas grandes sem travar escritas.","sql\u002Fsql-por-dentro\u002F03.tabelas-e-restricoes",{"path":564,"title":565,"description":566,"nav":565,"group":27,"version":8,"color":8,"colorDark":8,"order":8,"spell":8,"cover":8,"stem":567},"\u002Fsql\u002Fsql-por-dentro\u002Fselect-filtros-e-null","SELECT, filtros e NULL","Filtros, CASE, coalesce, nullif, DISTINCT ON, paginação e a lógica de três valores do NULL, com as armadilhas de \u003C> e ORDER BY.","sql\u002Fsql-por-dentro\u002F04.select-filtros-e-null",{"path":569,"title":570,"description":571,"nav":570,"group":27,"version":8,"color":8,"colorDark":8,"order":8,"spell":8,"cover":8,"stem":572},"\u002Fsql\u002Fsql-por-dentro\u002Ffuncoes-de-texto","Funções de texto","Caracteres e bytes, NULL em concatenação, collation; juntar, extrair, limpar e substituir texto, expressões regulares, slugs e comparação sem maiúsculas nem acentos.","sql\u002Fsql-por-dentro\u002F05.funcoes-de-texto",{"path":574,"title":575,"description":576,"nav":575,"group":27,"version":8,"color":8,"colorDark":8,"order":8,"spell":8,"cover":8,"stem":577},"\u002Fsql\u002Fsql-por-dentro\u002Ffuncoes-de-data-e-hora","Funções de data e hora","O que timestamptz guarda de verdade, AT TIME ZONE, qual 'agora' usar, truncar e extrair, intervalos semiabertos em relatórios e a diferença entre 1 day e 24 hours.","sql\u002Fsql-por-dentro\u002F06.funcoes-de-data-e-hora",{"path":579,"title":580,"description":581,"nav":580,"group":27,"version":8,"color":8,"colorDark":8,"order":8,"spell":8,"cover":8,"stem":582},"\u002Fsql\u002Fsql-por-dentro\u002Fjoins","JOINs","INNER, LEFT, RIGHT, FULL e CROSS JOIN, semi e anti join com EXISTS, a armadilha do NOT IN com NULL, filtros que transformam LEFT em INNER, e LATERAL.","sql\u002Fsql-por-dentro\u002F07.joins",{"path":584,"title":585,"description":586,"nav":585,"group":27,"version":8,"color":8,"colorDark":8,"order":8,"spell":8,"cover":8,"stem":587},"\u002Fsql\u002Fsql-por-dentro\u002Fagregacao","Agregação","GROUP BY e HAVING, agregados condicionais com FILTER, mediana, agregados que montam coleções, e subtotais com GROUPING SETS, ROLLUP e CUBE.","sql\u002Fsql-por-dentro\u002F08.agregacao",{"path":589,"title":590,"description":591,"nav":590,"group":27,"version":8,"color":8,"colorDark":8,"order":8,"spell":8,"cover":8,"stem":592},"\u002Fsql\u002Fsql-por-dentro\u002Fsubconsultas-e-ctes","Subconsultas e CTEs","Subconsultas escalares, derivadas e com ALL\u002FANY; CTEs embutidas ou materializadas, CTEs que modificam dados e CTEs recursivas para árvores.","sql\u002Fsql-por-dentro\u002F09.subconsultas-e-ctes",{"path":594,"title":595,"description":596,"nav":595,"group":27,"version":8,"color":8,"colorDark":8,"order":8,"spell":8,"cover":8,"stem":597},"\u002Fsql\u002Fsql-por-dentro\u002Ffuncoes-de-janela","Funções de janela","OVER, PARTITION BY e frames; row_number, rank e dense_rank, soma acumulada, média móvel, lag, porcentagem do total e top N por grupo.","sql\u002Fsql-por-dentro\u002F10.funcoes-de-janela",{"path":599,"title":600,"description":601,"nav":602,"group":27,"version":8,"color":8,"colorDark":8,"order":8,"spell":8,"cover":8,"stem":603},"\u002Fsql\u002Fsql-por-dentro\u002Finsert-update-upsert-e-merge","INSERT, UPDATE, upsert e MERGE","INSERT com RETURNING, UPDATE e DELETE com JOIN, upsert atômico com ON CONFLICT, MERGE para sincronizações em lote e cargas com COPY.","INSERT, UPDATE, upsert, MERGE","sql\u002Fsql-por-dentro\u002F11.insert-update-upsert-e-merge",{"path":605,"title":606,"description":607,"nav":606,"group":608,"version":8,"color":8,"colorDark":8,"order":8,"spell":8,"cover":8,"stem":609},"\u002Fsql\u002Fsql-por-dentro\u002Ftransacoes-mvcc-e-isolamento","Transações, MVCC e isolamento","ACID, savepoints, como o MVCC cria versões em vez de sobrescrever, VACUUM e transações longas, e o que cada nível de isolamento permite.","Avançado","sql\u002Fsql-por-dentro\u002F12.transacoes-mvcc-e-isolamento",{"path":611,"title":612,"description":613,"nav":612,"group":608,"version":8,"color":8,"colorDark":8,"order":8,"spell":8,"cover":8,"stem":614},"\u002Fsql\u002Fsql-por-dentro\u002Flocks-e-concorrencia","Locks e concorrência","Locks de linha com FOR UPDATE, filas de jobs com SKIP LOCKED, os oito modos de lock de tabela e a matriz de conflitos, a fila de DDL, deadlocks, advisory locks e lock otimista.","sql\u002Fsql-por-dentro\u002F13.locks-e-concorrencia",{"path":616,"title":617,"description":618,"nav":617,"group":608,"version":8,"color":8,"colorDark":8,"order":8,"spell":8,"cover":8,"stem":619},"\u002Fsql\u002Fsql-por-dentro\u002Findices","Índices","Heap e índices; B-tree, Hash, GIN, GiST, SP-GiST e BRIN; índices compostos, parciais, de expressão e cobertos; e o custo de cada índice nas escritas.","sql\u002Fsql-por-dentro\u002F14.indices",{"path":621,"title":622,"description":623,"nav":622,"group":608,"version":8,"color":8,"colorDark":8,"order":8,"spell":8,"cover":8,"stem":624},"\u002Fsql\u002Fsql-por-dentro\u002Fexplain-e-o-planejador","EXPLAIN e o planejador","Como o planejador estima custos e escolhe um plano, como ler EXPLAIN ANALYZE e como achar as consultas que importam.","sql\u002Fsql-por-dentro\u002F15.explain-e-o-planejador",{"path":626,"title":627,"description":628,"nav":629,"group":608,"version":8,"color":8,"colorDark":8,"order":8,"spell":8,"cover":8,"stem":630},"\u002Fsql\u002Fsql-por-dentro\u002Fmonitoramento-as-views-do-sistema","Monitoramento: as views do sistema","pg_stat_activity, pg_locks, pg_stat_statements, saúde de tabelas e índices, cache e I\u002FO, progresso de operações longas, replicação, tamanhos e logs.","Monitoramento (views do sistema)","sql\u002Fsql-por-dentro\u002F16.monitoramento-as-views-do-sistema",{"path":632,"title":633,"description":634,"nav":633,"group":608,"version":8,"color":8,"colorDark":8,"order":8,"spell":8,"cover":8,"stem":635},"\u002Fsql\u002Fsql-por-dentro\u002Fjsonb","JSONB","O formato binário do jsonb, operadores de acesso e contenção, índices GIN e quando um atributo em JSON deve virar coluna.","sql\u002Fsql-por-dentro\u002F17.jsonb",{"path":637,"title":638,"description":639,"nav":640,"group":608,"version":8,"color":8,"colorDark":8,"order":8,"spell":8,"cover":8,"stem":641},"\u002Fsql\u002Fsql-por-dentro\u002Fbusca-textual-full-text-search","Busca textual (full-text search)","De texto a tsvector, consultas com tsquery, coluna gerada com pesos, índice e ranking, acentos com unaccent e os limites da busca textual.","Busca textual","sql\u002Fsql-por-dentro\u002F18.busca-textual-full-text-search",{"path":643,"title":644,"description":645,"nav":644,"group":608,"version":8,"color":8,"colorDark":8,"order":8,"spell":8,"cover":8,"stem":646},"\u002Fsql\u002Fsql-por-dentro\u002Ftrigramas-e-busca-aproximada","Trigramas e busca aproximada","Como pg_trgm quebra texto em trigramas, similarity e word_similarity, GIN ou GiST, e quando trigramas servem mais que a busca textual.","sql\u002Fsql-por-dentro\u002F19.trigramas-e-busca-aproximada",{"path":648,"title":649,"description":650,"nav":649,"group":608,"version":8,"color":8,"colorDark":8,"order":8,"spell":8,"cover":8,"stem":651},"\u002Fsql\u002Fsql-por-dentro\u002Franges-arrays-e-enums","Ranges, arrays e enums","Ranges como um único valor, com operadores de sobreposição e contenção; arrays com GIN e ANY; e enums com suas limitações.","sql\u002Fsql-por-dentro\u002F20.ranges-arrays-e-enums",{"path":653,"title":654,"description":655,"nav":654,"group":608,"version":8,"color":8,"colorDark":8,"order":8,"spell":8,"cover":8,"stem":656},"\u002Fsql\u002Fsql-por-dentro\u002Ffuncoes-triggers-e-views","Funções, triggers e views","Funções SQL e PL\u002FpgSQL, volatilidade, triggers, views e views materializadas.","sql\u002Fsql-por-dentro\u002F21.funcoes-triggers-e-views",{"path":658,"title":659,"description":660,"nav":659,"group":608,"version":8,"color":8,"colorDark":8,"order":8,"spell":8,"cover":8,"stem":661},"\u002Fsql\u002Fsql-por-dentro\u002Fparticionamento","Particionamento","Quando particionar vale a pena, partições por range, lista e hash, poda de partições e manutenção.","sql\u002Fsql-por-dentro\u002F22.particionamento",{"path":663,"title":664,"description":665,"nav":664,"group":608,"version":8,"color":8,"colorDark":8,"order":8,"spell":8,"cover":8,"stem":666},"\u002Fsql\u002Fsql-por-dentro\u002Fseguranca-e-operacao","Segurança e operação","SQL injection, papéis e Row-Level Security, conexões e pooling, VACUUM e autovacuum por dentro, wraparound, backup e replicação, LISTEN\u002FNOTIFY e extensões.","sql\u002Fsql-por-dentro\u002F23.seguranca-e-operacao",{"path":668,"title":669,"description":670,"nav":669,"group":608,"version":8,"color":8,"colorDark":8,"order":8,"spell":8,"cover":8,"stem":671},"\u002Fsql\u002Fsql-por-dentro\u002Fmodelagem-e-padroes","Modelagem e padrões","Normalização, desnormalização com intenção, paginação por keyset, armadilhas comuns de modelagem e migrações sem downtime.","sql\u002Fsql-por-dentro\u002F24.modelagem-e-padroes",{"path":673,"title":123,"description":674,"nav":123,"group":125,"version":8,"color":8,"colorDark":8,"order":8,"spell":8,"cover":8,"stem":675},"\u002Fsql\u002Fsql-por-dentro\u002Fperguntas-de-revisao","Perguntas para testar o tomo: ordem de execução, NULL, JOINs, janelas, MVCC, isolamento, índices, EXPLAIN, locks, busca textual e operação.","sql\u002Fsql-por-dentro\u002F25.perguntas-de-revisao",{"path":677,"title":678,"description":679,"nav":8,"group":8,"version":8,"color":680,"colorDark":681,"order":682,"spell":683,"cover":684,"stem":685,"tomes":686},"\u002Flaravel","Laravel","O framework PHP que eu uso no dia a dia, do request ao deploy: arquitetura, HTTP, Eloquent e o SQL que ele gera, segurança, filas, testes e produção.","#9e2416","#f0806a",7,"embers","#6b1712","laravel\u002Findex",[687],{"path":688,"title":689,"description":690,"nav":8,"group":8,"version":691,"color":8,"colorDark":8,"order":8,"spell":8,"cover":8,"stem":692,"chapters":693},"\u002Flaravel\u002Flaravel-por-dentro","Laravel por dentro","Arquitetura, HTTP, banco, Eloquent, segurança, filas, testes e produção em 57 capítulos. Cada recurso traz o que recebe, o que devolve e um exemplo; nos capítulos de banco, também o SQL gerado no PostgreSQL. Use o índice ou a busca para ir direto a um método.","Laravel 11 a 13 · nível pleno avançado","laravel\u002Flaravel-por-dentro\u002Findex",[694,700,706,711,717,723,729,734,739,745,750,755,761,768,774,781,787,793,799,805,810,815,821,827,833,839,845,851,857,863,869,874,880,886,892,898,903,908,913,919,924,930,935,941,947,952,957,963,968,974,980,986,991,996,1002,1007,1011],{"path":695,"title":696,"description":697,"nav":184,"group":698,"version":8,"color":8,"colorDark":8,"order":8,"spell":8,"cover":8,"stem":699},"\u002Flaravel\u002Flaravel-por-dentro\u002Fciclo-de-vida","Ciclo de vida de uma requisição","Toda requisição HTTP entra por um único arquivo, public\u002Findex.php, passa pelo container, pelos middlewares e pela rota, e volta pelo mesmo caminho como resposta. Entender esse trajeto explica onde cada peça do Laravel atua.","Arquitetura","laravel\u002Flaravel-por-dentro\u002F01.ciclo-de-vida",{"path":701,"title":702,"description":703,"nav":704,"group":698,"version":8,"color":8,"colorDark":8,"order":8,"spell":8,"cover":8,"stem":705},"\u002Flaravel\u002Flaravel-por-dentro\u002Fservice-container","Service Container e injeção de dependência","O Service Container é o objeto que cria as classes da aplicação e entrega a cada uma as dependências que ela pede. Quase tudo no Laravel (controllers, jobs, listeners, comandos, middlewares) é construído por ele.","Service Container","laravel\u002Flaravel-por-dentro\u002F02.service-container",{"path":707,"title":708,"description":709,"nav":708,"group":698,"version":8,"color":8,"colorDark":8,"order":8,"spell":8,"cover":8,"stem":710},"\u002Flaravel\u002Flaravel-por-dentro\u002Fservice-providers","Service Providers","Service Providers são as classes que configuram a aplicação na inicialização: registram bindings, listeners, rotas de pacotes, macros e regras globais. O AppServiceProvider já existe em todo projeto.","laravel\u002Flaravel-por-dentro\u002F03.service-providers",{"path":712,"title":713,"description":714,"nav":715,"group":698,"version":8,"color":8,"colorDark":8,"order":8,"spell":8,"cover":8,"stem":716},"\u002Flaravel\u002Flaravel-por-dentro\u002Ffacades-e-contracts","Facades, Contracts e helpers","Facades, contracts e helpers são três formas de acessar o mesmo serviço do container. Escolher entre elas é questão de estilo e de testabilidade, não de funcionalidade.","Facades e contracts","laravel\u002Flaravel-por-dentro\u002F04.facades-e-contracts",{"path":718,"title":719,"description":720,"nav":721,"group":698,"version":8,"color":8,"colorDark":8,"order":8,"spell":8,"cover":8,"stem":722},"\u002Flaravel\u002Flaravel-por-dentro\u002Finstalacao-e-configuracao","Instalação, configuração e estrutura","Um projeto Laravel é configurado por arquivos em config\u002F, que leem valores do .env. Saber como essas duas camadas se relacionam evita os bugs mais comuns de produção.","Instalação e configuração","laravel\u002Flaravel-por-dentro\u002F05.instalacao-e-configuracao",{"path":724,"title":725,"description":726,"nav":725,"group":727,"version":8,"color":8,"colorDark":8,"order":8,"spell":8,"cover":8,"stem":728},"\u002Flaravel\u002Flaravel-por-dentro\u002Frotas","Rotas","Uma rota liga um método HTTP e uma URL a um controller ou closure. As rotas web ficam em routes\u002Fweb.php (com sessão, cookies e CSRF) e as de API em routes\u002Fapi.php (sem estado, prefixo \u002Fapi).","HTTP","laravel\u002Flaravel-por-dentro\u002F06.rotas",{"path":730,"title":731,"description":732,"nav":731,"group":727,"version":8,"color":8,"colorDark":8,"order":8,"spell":8,"cover":8,"stem":733},"\u002Flaravel\u002Flaravel-por-dentro\u002Fmiddleware","Middleware","Middleware é uma camada que envolve a requisição: roda código antes de ela chegar ao controller, depois que a resposta é gerada, ou interrompe o fluxo (por exemplo, devolvendo 401).","laravel\u002Flaravel-por-dentro\u002F07.middleware",{"path":735,"title":736,"description":737,"nav":736,"group":727,"version":8,"color":8,"colorDark":8,"order":8,"spell":8,"cover":8,"stem":738},"\u002Flaravel\u002Flaravel-por-dentro\u002Fcontrollers","Controllers","Controllers agrupam a lógica que responde a requisições relacionadas. A boa prática é mantê-los finos: recebem a requisição, delegam o trabalho e devolvem a resposta.","laravel\u002Flaravel-por-dentro\u002F08.controllers",{"path":740,"title":741,"description":742,"nav":743,"group":727,"version":8,"color":8,"colorDark":8,"order":8,"spell":8,"cover":8,"stem":744},"\u002Flaravel\u002Flaravel-por-dentro\u002Frequests-e-sessao","Requests, arquivos, sessão e cookies","O objeto Illuminate\\Http\\Request representa a requisição atual e dá acesso tipado a tudo que o cliente enviou.","Requests e sessão","laravel\u002Flaravel-por-dentro\u002F09.requests-e-sessao",{"path":746,"title":747,"description":748,"nav":747,"group":727,"version":8,"color":8,"colorDark":8,"order":8,"spell":8,"cover":8,"stem":749},"\u002Flaravel\u002Flaravel-por-dentro\u002Fvalidacao","Validação","A validação garante que só dados no formato esperado cheguem à regra de negócio. Quando falha, o Laravel responde sozinho: redireciona de volta com os erros (requisição web) ou devolve 422 com JSON (requisição que espera JSON).","laravel\u002Flaravel-por-dentro\u002F10.validacao",{"path":751,"title":752,"description":753,"nav":752,"group":727,"version":8,"color":8,"colorDark":8,"order":8,"spell":8,"cover":8,"stem":754},"\u002Flaravel\u002Flaravel-por-dentro\u002Frespostas-e-api-resources","Respostas e API Resources","Todo controller devolve algo que o Laravel converte em resposta HTTP. Para APIs, os API Resources definem o formato do JSON de forma explícita e independente das colunas do banco.","laravel\u002Flaravel-por-dentro\u002F11.respostas-e-api-resources",{"path":756,"title":757,"description":758,"nav":759,"group":727,"version":8,"color":8,"colorDark":8,"order":8,"spell":8,"cover":8,"stem":760},"\u002Flaravel\u002Flaravel-por-dentro\u002Fblade-e-frontend","Blade, componentes e frontend","Blade é o motor de templates do Laravel. Ele compila as views para PHP puro e as guarda em cache, então não pesa em produção.","Blade e frontend","laravel\u002Flaravel-por-dentro\u002F12.blade-e-frontend",{"path":762,"title":763,"description":764,"nav":765,"group":766,"version":8,"color":8,"colorDark":8,"order":8,"spell":8,"cover":8,"stem":767},"\u002Flaravel\u002Flaravel-por-dentro\u002Fmigrations","Migrations e schema","Migrations são o controle de versão do banco: cada arquivo descreve uma alteração no schema e pode ser aplicado ou desfeito. Assim, todos os ambientes chegam ao mesmo schema rodando os mesmos arquivos.","Migrations","Banco de dados","laravel\u002Flaravel-por-dentro\u002F13.migrations",{"path":769,"title":770,"description":771,"nav":772,"group":766,"version":8,"color":8,"colorDark":8,"order":8,"spell":8,"cover":8,"stem":773},"\u002Flaravel\u002Flaravel-por-dentro\u002Fdb-transacoes-e-seeders","Banco de dados: conexões, SQL cru, transações, seeders e Redis","Além do Eloquent, a fachada DB dá acesso direto às conexões, ao Query Builder sem Models e às transações.","DB, transações e seeders","laravel\u002Flaravel-por-dentro\u002F14.db-transacoes-e-seeders",{"path":775,"title":776,"description":777,"nav":778,"group":779,"version":8,"color":8,"colorDark":8,"order":8,"spell":8,"cover":8,"stem":780},"\u002Flaravel\u002Flaravel-por-dentro\u002Fcomo-um-model-funciona","Eloquent: como um Model funciona","Um Model do Eloquent é uma classe PHP que representa uma tabela; cada instância representa uma linha. Quase tudo o que você chama nele, porém, não está escrito na classe Model: é repassado para outras classes.","Como um Model funciona","Eloquent","laravel\u002Flaravel-por-dentro\u002F15.como-um-model-funciona",{"path":782,"title":783,"description":784,"nav":785,"group":779,"version":8,"color":8,"colorDark":8,"order":8,"spell":8,"cover":8,"stem":786},"\u002Flaravel\u002Flaravel-por-dentro\u002Fcriar-e-configurar","Criando e configurando o Model","Um Model funciona com zero configuração se seguir as convenções; as propriedades abaixo existem para quando a sua tabela foge delas.","Criar e configurar","laravel\u002Flaravel-por-dentro\u002F16.criar-e-configurar",{"path":788,"title":789,"description":790,"nav":791,"group":779,"version":8,"color":8,"colorDark":8,"order":8,"spell":8,"cover":8,"stem":792},"\u002Flaravel\u002Flaravel-por-dentro\u002Frecuperar-registros","Recuperando registros","Estes métodos executam a query e devolvem resultados; tudo o que vem antes deles (where, orderBy…) só monta o SQL.","Recuperar registros","laravel\u002Flaravel-por-dentro\u002F17.recuperar-registros",{"path":794,"title":795,"description":796,"nav":797,"group":779,"version":8,"color":8,"colorDark":8,"order":8,"spell":8,"cover":8,"stem":798},"\u002Flaravel\u002Flaravel-por-dentro\u002Ffiltros-where","Filtros: where e todas as variações","Todo filtro devolve o próprio Builder, então você encadeia quantos quiser; filtros encadeados viram AND, e as versões or... viram OR.","Filtros (where)","laravel\u002Flaravel-por-dentro\u002F18.filtros-where",{"path":800,"title":801,"description":802,"nav":803,"group":779,"version":8,"color":8,"colorDark":8,"order":8,"spell":8,"cover":8,"stem":804},"\u002Flaravel\u002Flaravel-por-dentro\u002Fselect-joins-e-ordem","Select, ordenação, agrupamento, limites, joins e subqueries","Estes métodos controlam quais colunas, em que ordem e quantas linhas voltam, além de combinar tabelas.","Select, joins e ordem","laravel\u002Flaravel-por-dentro\u002F19.select-joins-e-ordem",{"path":806,"title":807,"description":808,"nav":807,"group":779,"version":8,"color":8,"colorDark":8,"order":8,"spell":8,"cover":8,"stem":809},"\u002Flaravel\u002Flaravel-por-dentro\u002Fagregacoes-e-paginacao","Agregações e paginação","Agregações devolvem um número calculado pelo banco; paginação devolve uma página de resultados com metadados para montar links.","laravel\u002Flaravel-por-dentro\u002F20.agregacoes-e-paginacao",{"path":811,"title":812,"description":813,"nav":812,"group":779,"version":8,"color":8,"colorDark":8,"order":8,"spell":8,"cover":8,"stem":814},"\u002Flaravel\u002Flaravel-por-dentro\u002Finserir-e-atualizar","Inserir e atualizar","Há dois caminhos: pelo Model (dispara eventos, casts, mutators e timestamps) ou pela query (uma instrução SQL direta, mais rápida, sem eventos). Escolher o caminho errado é a causa mais comum de \"meu observer não rodou\".","laravel\u002Flaravel-por-dentro\u002F21.inserir-e-atualizar",{"path":816,"title":817,"description":818,"nav":819,"group":779,"version":8,"color":8,"colorDark":8,"order":8,"spell":8,"cover":8,"stem":820},"\u002Flaravel\u002Flaravel-por-dentro\u002Fexcluir-e-soft-delete","Excluir, Soft Deletes e Pruning","Excluir pela instância dispara eventos; excluir pela query não. Soft delete troca a exclusão real por uma marcação de data, e pruning apaga registros antigos de forma agendada.","Excluir e soft delete","laravel\u002Flaravel-por-dentro\u002F22.excluir-e-soft-delete",{"path":822,"title":823,"description":824,"nav":825,"group":779,"version":8,"color":8,"colorDark":8,"order":8,"spell":8,"cover":8,"stem":826},"\u002Flaravel\u002Flaravel-por-dentro\u002Festado-da-instancia","Estado da instância: alterações, recarga, cópia e comparação","Cada Model guarda duas versões dos atributos: a atual e a original (como veio do banco). Os métodos abaixo comparam essas versões e controlam o ciclo de vida do objeto.","Estado da instância","laravel\u002Flaravel-por-dentro\u002F23.estado-da-instancia",{"path":828,"title":829,"description":830,"nav":831,"group":779,"version":8,"color":8,"colorDark":8,"order":8,"spell":8,"cover":8,"stem":832},"\u002Flaravel\u002Flaravel-por-dentro\u002Fscopes","Scopes: filtros com nome","Um scope é um filtro reutilizável que você define no Model. Local scopes são chamados quando você quer (Pedido::pagos()); global scopes se aplicam sozinhos a todas as consultas. Métodos como byToken() quase sempre são local scopes.","Scopes","laravel\u002Flaravel-por-dentro\u002F24.scopes",{"path":834,"title":835,"description":836,"nav":837,"group":779,"version":8,"color":8,"colorDark":8,"order":8,"spell":8,"cover":8,"stem":838},"\u002Flaravel\u002Flaravel-por-dentro\u002Faccessors-e-casts","Accessors, mutators e casts","Os três transformam valores entre o banco e o PHP: o accessor age na leitura, o mutator na escrita, e o cast faz as duas conversões para tipos comuns sem você escrever lógica.","Accessors e casts","laravel\u002Flaravel-por-dentro\u002F25.accessors-e-casts",{"path":840,"title":841,"description":842,"nav":843,"group":779,"version":8,"color":8,"colorDark":8,"order":8,"spell":8,"cover":8,"stem":844},"\u002Flaravel\u002Flaravel-por-dentro\u002Fdefinir-relacionamentos","Relacionamentos: definição","Um relacionamento é um método público do Model que retorna um objeto de relação. Os parâmetros de chave são opcionais quando você segue as convenções (user_id, id); informe-os só quando o banco foge delas.","Definir relacionamentos","laravel\u002Flaravel-por-dentro\u002F26.definir-relacionamentos",{"path":846,"title":847,"description":848,"nav":849,"group":779,"version":8,"color":8,"colorDark":8,"order":8,"spell":8,"cover":8,"stem":850},"\u002Flaravel\u002Flaravel-por-dentro\u002Fconsultar-relacionamentos","Relacionamentos: consulta e manipulação","Depois de definido, um relacionamento serve para três coisas: ler os relacionados, filtrar o Model principal pela existência deles, e criar ou ligar registros relacionados.","Consultar relacionamentos","laravel\u002Flaravel-por-dentro\u002F27.consultar-relacionamentos",{"path":852,"title":853,"description":854,"nav":855,"group":779,"version":8,"color":8,"colorDark":8,"order":8,"spell":8,"cover":8,"stem":856},"\u002Flaravel\u002Flaravel-por-dentro\u002Feager-loading-with","Eager loading: with e todas as variações","Eager loading carrega os relacionamentos de todos os registros com uma query extra por relacionamento, em vez de uma query por registro. É a principal ferramenta de desempenho do Eloquent.","Eager loading (with)","laravel\u002Flaravel-por-dentro\u002F28.eager-loading-with",{"path":858,"title":859,"description":860,"nav":861,"group":779,"version":8,"color":8,"colorDark":8,"order":8,"spell":8,"cover":8,"stem":862},"\u002Flaravel\u002Flaravel-por-dentro\u002Feventos-e-observers","Eventos e observers","O Model dispara eventos em cada etapa do ciclo de vida; você pode reagir a eles com Closures no booted(), com uma classe Observer ou com classes de evento. Eventos só disparam em operações via Model (seção 21), nunca em updates\u002Fdeletes por query.","Eventos de Model","laravel\u002Flaravel-por-dentro\u002F29.eventos-e-observers",{"path":864,"title":865,"description":866,"nav":867,"group":779,"version":8,"color":8,"colorDark":8,"order":8,"spell":8,"cover":8,"stem":868},"\u002Flaravel\u002Flaravel-por-dentro\u002Fserializacao","Serialização: transformar em array e JSON","Quando um Model sai da aplicação (resposta de API, dd, cache), ele vira array ou JSON. Estes recursos controlam quais atributos aparecem e como.","Serialização","laravel\u002Flaravel-por-dentro\u002F30.serializacao",{"path":870,"title":871,"description":872,"nav":871,"group":779,"version":8,"color":8,"colorDark":8,"order":8,"spell":8,"cover":8,"stem":873},"\u002Flaravel\u002Flaravel-por-dentro\u002Fcollections","Collections do Eloquent","get(), all() e relacionamentos \"muitos\" devolvem uma Illuminate\\Database\\Eloquent\\Collection. Ela tem todos os métodos da Collection comum (map, filter, sum, groupBy, sortBy, first, each, pluck…) e mais alguns específicos para Models.","laravel\u002Flaravel-por-dentro\u002F31.collections",{"path":875,"title":876,"description":877,"nav":878,"group":779,"version":8,"color":8,"colorDark":8,"order":8,"spell":8,"cover":8,"stem":879},"\u002Flaravel\u002Flaravel-por-dentro\u002Fmodo-estrito","Modo estrito e proteção contra mass assignment","Por padrão, o Eloquent é tolerante: ignora campos não permitidos, carrega relacionamentos sob demanda e devolve null para atributos inexistentes. O modo estrito transforma esses silêncios em erros, o que ajuda muito quem está aprendendo.","Modo estrito","laravel\u002Flaravel-por-dentro\u002F32.modo-estrito",{"path":881,"title":882,"description":883,"nav":884,"group":779,"version":8,"color":8,"colorDark":8,"order":8,"spell":8,"cover":8,"stem":885},"\u002Flaravel\u002Flaravel-por-dentro\u002Ffactories","Factories: gerar Models para testes e seeders","Uma factory descreve como criar um Model com dados falsos. Ela é ligada ao Model pela trait HasFactory e usada em testes e seeders.","Factories","laravel\u002Flaravel-por-dentro\u002F33.factories",{"path":887,"title":888,"description":889,"nav":890,"group":779,"version":8,"color":8,"colorDark":8,"order":8,"spell":8,"cover":8,"stem":891},"\u002Flaravel\u002Flaravel-por-dentro\u002Fmetodos-proprios-e-macros","Métodos customizados, repositories e macros (o caso do byToken)","Se um método não aparece em nenhuma seção deste guia, ele foi criado no seu projeto ou em um pacote. $this->model->byToken(...) é um exemplo típico: byToken não existe no Laravel.","Métodos próprios e macros","laravel\u002Flaravel-por-dentro\u002F34.metodos-proprios-e-macros",{"path":893,"title":894,"description":895,"nav":896,"group":779,"version":8,"color":8,"colorDark":8,"order":8,"spell":8,"cover":8,"stem":897},"\u002Flaravel\u002Flaravel-por-dentro\u002Fdepuracao","Depuração: ver o SQL e descobrir o que um método faz","Quando um método é desconhecido ou o resultado é inesperado, veja o SQL gerado. Estas ferramentas mostram exatamente o que o Eloquent está pedindo ao banco.","Depuração de queries","laravel\u002Flaravel-por-dentro\u002F35.depuracao",{"path":899,"title":450,"description":900,"nav":450,"group":901,"version":8,"color":8,"colorDark":8,"order":8,"spell":8,"cover":8,"stem":902},"\u002Flaravel\u002Flaravel-por-dentro\u002Fautenticacao","Autenticação responde \"quem é você?\". O Laravel separa isso em guards, que dizem como a requisição é autenticada (sessão, token), e providers, que dizem de onde vem o usuário (Eloquent, banco).","Segurança","laravel\u002Flaravel-por-dentro\u002F36.autenticacao",{"path":904,"title":905,"description":906,"nav":905,"group":901,"version":8,"color":8,"colorDark":8,"order":8,"spell":8,"cover":8,"stem":907},"\u002Flaravel\u002Flaravel-por-dentro\u002Fautorizacao","Autorização","Autorização responde \"você pode fazer isso?\". O Laravel oferece Gates (regras soltas, em closures) e Policies (regras agrupadas por Model).","laravel\u002Flaravel-por-dentro\u002F37.autorizacao",{"path":909,"title":910,"description":911,"nav":910,"group":901,"version":8,"color":8,"colorDark":8,"order":8,"spell":8,"cover":8,"stem":912},"\u002Flaravel\u002Flaravel-por-dentro\u002Fseguranca-da-aplicacao","Segurança da aplicação","O Laravel protege contra os ataques mais comuns por padrão. Esta seção mostra o que ele faz sozinho e onde você pode desligar a proteção sem perceber.","laravel\u002Flaravel-por-dentro\u002F38.seguranca-da-aplicacao",{"path":914,"title":915,"description":916,"nav":915,"group":917,"version":8,"color":8,"colorDark":8,"order":8,"spell":8,"cover":8,"stem":918},"\u002Flaravel\u002Flaravel-por-dentro\u002Ffilas-e-jobs","Filas e jobs","Filas tiram trabalho lento ou sujeito a falhas (e-mails, integrações, relatórios, processamento de arquivos) do ciclo da requisição. O controller só registra o job; um processo separado, o worker, executa depois.","Assíncrono","laravel\u002Flaravel-por-dentro\u002F39.filas-e-jobs",{"path":920,"title":921,"description":922,"nav":921,"group":917,"version":8,"color":8,"colorDark":8,"order":8,"spell":8,"cover":8,"stem":923},"\u002Flaravel\u002Flaravel-por-dentro\u002Feventos-e-listeners","Eventos e listeners","Eventos desacoplam \"o que aconteceu\" de \"o que fazer a respeito\". O código que conclui um pedido dispara PedidoPago; e-mail, nota fiscal e métricas são listeners independentes, que podem ser adicionados sem mexer no fluxo principal.","laravel\u002Flaravel-por-dentro\u002F40.eventos-e-listeners",{"path":925,"title":926,"description":927,"nav":928,"group":917,"version":8,"color":8,"colorDark":8,"order":8,"spell":8,"cover":8,"stem":929},"\u002Flaravel\u002Flaravel-por-dentro\u002Fagendamento","Agendamento de tarefas","O agendador substitui dezenas de linhas no crontab por código versionado. No servidor existe uma única entrada no cron, que roda a cada minuto e executa o que estiver na hora.","Agendamento","laravel\u002Flaravel-por-dentro\u002F41.agendamento",{"path":931,"title":932,"description":933,"nav":932,"group":917,"version":8,"color":8,"colorDark":8,"order":8,"spell":8,"cover":8,"stem":934},"\u002Flaravel\u002Flaravel-por-dentro\u002Femail-e-notificacoes","E-mail e notificações","E-mails são enviados por Mailables. Notificações são uma camada acima: uma mensagem que pode sair por vários canais (e-mail, banco, SMS, Slack, broadcast) conforme a preferência do destinatário.","laravel\u002Flaravel-por-dentro\u002F42.email-e-notificacoes",{"path":936,"title":937,"description":938,"nav":939,"group":917,"version":8,"color":8,"colorDark":8,"order":8,"spell":8,"cover":8,"stem":940},"\u002Flaravel\u002Flaravel-por-dentro\u002Fbroadcasting","Broadcasting (tempo real)","Broadcasting envia eventos do servidor para o navegador por WebSocket: novos pedidos aparecendo no painel, chat, notificações instantâneas, progresso de importação.","Broadcasting","laravel\u002Flaravel-por-dentro\u002F43.broadcasting",{"path":942,"title":943,"description":944,"nav":943,"group":945,"version":8,"color":8,"colorDark":8,"order":8,"spell":8,"cover":8,"stem":946},"\u002Flaravel\u002Flaravel-por-dentro\u002Fcache-e-locks","Cache e locks","O cache guarda o resultado de operações caras (consultas pesadas, chamadas externas, cálculos) para reaproveitar nas próximas requisições. O mesmo serviço oferece locks atômicos, que coordenam processos concorrentes.","Serviços do framework","laravel\u002Flaravel-por-dentro\u002F44.cache-e-locks",{"path":948,"title":949,"description":950,"nav":949,"group":945,"version":8,"color":8,"colorDark":8,"order":8,"spell":8,"cover":8,"stem":951},"\u002Flaravel\u002Flaravel-por-dentro\u002Farquivos-storage","Arquivos (Storage)","A facade Storage dá a mesma API para disco local, S3 e outros serviços. Trocar o destino dos arquivos é questão de configuração.","laravel\u002Flaravel-por-dentro\u002F45.arquivos-storage",{"path":953,"title":954,"description":955,"nav":954,"group":945,"version":8,"color":8,"colorDark":8,"order":8,"spell":8,"cover":8,"stem":956},"\u002Flaravel\u002Flaravel-por-dentro\u002Fhttp-client","HTTP Client","A facade Http é um cliente para APIs externas, construído sobre o Guzzle, com API fluente, novas tentativas e fakes para testes.","laravel\u002Flaravel-por-dentro\u002F46.http-client",{"path":958,"title":959,"description":960,"nav":961,"group":945,"version":8,"color":8,"colorDark":8,"order":8,"spell":8,"cover":8,"stem":962},"\u002Flaravel\u002Flaravel-por-dentro\u002Fartisan","Artisan e comandos","Artisan é a interface de linha de comando do Laravel. Além dos comandos do framework, você cria os seus para tarefas de manutenção, importações e rotinas agendadas.","Artisan","laravel\u002Flaravel-por-dentro\u002F47.artisan",{"path":964,"title":965,"description":966,"nav":965,"group":945,"version":8,"color":8,"colorDark":8,"order":8,"spell":8,"cover":8,"stem":967},"\u002Flaravel\u002Flaravel-por-dentro\u002Ferros-e-logs","Erros e logs","O Laravel captura toda exceção não tratada, decide se deve registrá-la (report) e como mostrá-la ao cliente (render). Os dois passos são configuráveis em bootstrap\u002Fapp.php.","laravel\u002Flaravel-por-dentro\u002F48.erros-e-logs",{"path":969,"title":970,"description":971,"nav":972,"group":945,"version":8,"color":8,"colorDark":8,"order":8,"spell":8,"cover":8,"stem":973},"\u002Flaravel\u002Flaravel-por-dentro\u002Fcollections-e-helpers","Collections, strings e helpers","O Laravel traz uma biblioteca de utilitários usada em todo o framework. Dominá-la reduz muito código de laço e manipulação de arrays.","Collections e helpers","laravel\u002Flaravel-por-dentro\u002F49.collections-e-helpers",{"path":975,"title":976,"description":977,"nav":978,"group":945,"version":8,"color":8,"colorDark":8,"order":8,"spell":8,"cover":8,"stem":979},"\u002Flaravel\u002Flaravel-por-dentro\u002Fprocessos-e-concorrencia","Processos, concorrência e contexto","Ferramentas recentes do framework para executar processos externos, paralelizar trabalho e propagar informações entre requisição, logs e jobs.","Processos e concorrência","laravel\u002Flaravel-por-dentro\u002F50.processos-e-concorrencia",{"path":981,"title":982,"description":983,"nav":982,"group":984,"version":8,"color":8,"colorDark":8,"order":8,"spell":8,"cover":8,"stem":985},"\u002Flaravel\u002Flaravel-por-dentro\u002Ftestes","Testes","O Laravel foi desenhado para ser testável: cada serviço do framework tem um fake, o banco é recriado entre testes e as requisições HTTP são simuladas sem servidor. Um pleno avançado escreve testes como parte da entrega, não depois.","Qualidade e produção","laravel\u002Flaravel-por-dentro\u002F51.testes",{"path":987,"title":988,"description":989,"nav":82,"group":984,"version":8,"color":8,"colorDark":8,"order":8,"spell":8,"cover":8,"stem":990},"\u002Flaravel\u002Flaravel-por-dentro\u002Fperformance","Performance e escala","A maior parte dos problemas de desempenho em Laravel vem do banco (N+1, falta de índice, colunas demais) e de trabalho síncrono que deveria estar na fila. Ajustes de framework vêm depois.","laravel\u002Flaravel-por-dentro\u002F52.performance",{"path":992,"title":993,"description":994,"nav":993,"group":984,"version":8,"color":8,"colorDark":8,"order":8,"spell":8,"cover":8,"stem":995},"\u002Flaravel\u002Flaravel-por-dentro\u002Farquitetura-da-aplicacao","Arquitetura da aplicação","O Laravel não impõe uma arquitetura além do MVC, e isso dá liberdade e risco. Esta seção reúne os padrões mais usados para manter um projeto grande organizado.","laravel\u002Flaravel-por-dentro\u002F53.arquitetura-da-aplicacao",{"path":997,"title":998,"description":999,"nav":1000,"group":984,"version":8,"color":8,"colorDark":8,"order":8,"spell":8,"cover":8,"stem":1001},"\u002Flaravel\u002Flaravel-por-dentro\u002Fdeploy","Deploy e operação","Deploy de Laravel é previsível quando segue sempre os mesmos passos e quando as migrations e workers são tratados com cuidado.","Deploy","laravel\u002Flaravel-por-dentro\u002F54.deploy",{"path":1003,"title":1004,"description":1005,"nav":1004,"group":984,"version":8,"color":8,"colorDark":8,"order":8,"spell":8,"cover":8,"stem":1006},"\u002Flaravel\u002Flaravel-por-dentro\u002Fecossistema","Ecossistema","Um pleno avançado conhece as ferramentas oficiais e sabe quando cada uma resolve o problema em vez de reinventá-lo.","laravel\u002Flaravel-por-dentro\u002F55.ecossistema",{"path":1008,"title":123,"description":1009,"nav":123,"group":125,"version":8,"color":8,"colorDark":8,"order":8,"spell":8,"cover":8,"stem":1010},"\u002Flaravel\u002Flaravel-por-dentro\u002Fperguntas-de-revisao","Perguntas no estilo de entrevista técnica para pleno. Tente responder antes de abrir cada uma.","laravel\u002Flaravel-por-dentro\u002F56.perguntas-de-revisao",{"path":1012,"title":1013,"description":1014,"nav":1013,"group":125,"version":8,"color":8,"colorDark":8,"order":8,"spell":8,"cover":8,"stem":1015},"\u002Flaravel\u002Flaravel-por-dentro\u002Fmapa-de-cobertura","Mapa de cobertura","O índice deste guia foi comparado, item a item, com o índice da documentação oficial do Laravel (versões 12 e 13). A tabela mostra onde cada tópico oficial está aqui.","laravel\u002Flaravel-por-dentro\u002F57.mapa-de-cobertura",{"left":1017,"top":1017,"width":1018,"height":1018,"rotate":1017,"vFlip":1019,"hFlip":1019,"body":1020},0,24,false,"\u003Cpath fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M12 5v16m8.001-2A2 2 0 0 0 22 17V5a2 2 0 0 0-1.999-2L16 3.002A5 5 0 0 0 12 5a5 5 0 0 0-4-2H4a2 2 0 0 0-2 2v12a2 2 0 0 0 1.999 2H8a5 5 0 0 1 4 2a5 5 0 0 1 4-2z\"\u002F>",1793994280921]