6+ anos de experiência com Frontend e React • React Native • AngularJS & Ionic • Node • Typescript é vida Pro f issional CP Frontend Meetup React Summit - AMS
referência para arquivo JS • Browser baixa o arquivo JS • Browser executa o arquivo • React transforma o HTML vazio na nossa página Client Side Rendering Fronte: https://medium.com/walmartglobaltech/the-bene f its-of- server-side-rendering-over-client-side-rendering-5d07 ff 2cefe8
envia o HTML resultante para o browser • Browser exibe o HTML para o usuário • Browser baixa o arquivo JS • Browser executa o arquivo JS • Hydration acontece, página agora é interativa Server Side Rendering Fronte: https://medium.com/walmartglobaltech/the-bene f its-of- server-side-rendering-over-client-side-rendering-5d07 ff 2cefe8
substitui os nodes no DOM • Adiciona event listeners aos nodes já existentes no DOM • Finalmente, assume a renderização como se fosse uma aplicação client-side Overview Fronte: https://www.patterns.dev/posts/progressive-hydration
componentes para o HTML que foi renderizado no servidor • O HTML renderizado no servidor precisa ser o mesmo renderizado no client Mapeando components para HTML
enviado pro client em tempo real? • Caso uma request seja feita no servidor, um estado de loading será enviado para o client • Quando a request resolver, o conteúdo f inal será enviado Overview
Components • Server Components podem ser async • Somente o HTML renderizado é enviado para o browser Server import React from 'react' async function fetchName() { return 'Lucas' } export default async function Page() { const name = await fetchName() return <span>{name}</span> }
para um Client Component • Server Actions é a exceção, sendo necessário o uso da diretiva "use server” Action import View from './View' export default async function Page() { async function generateFullName(name) { 'use server' return `${name} Correia` } return <View generateFullName={generateFullName} /> }
Reduz dados enviados/ recebidos pela rede • Boa alternativa para um possível BFF/Gateway • Type-safe. São apenas funções! Utilidades 'use server' export async function getName() { const user = await userApi.getUser(...) return user.name } export function setName() { return userApi.setUser({ name }) }