Code Monkey home page Code Monkey logo

curso-next's Introduction

Iniciando

yarn create next-app "curso-next" && cd "curso-next"
yarn add -D typescript @types/node @types/react

# rename .js to .tsx
find ./pages -name "*.js" -exec sh -c 'mv "$0" "${0%.js}.tsx"' {} \;

# move pages to src
mkdir src && mv ./pages ./src/

# run project
yarn dev

# styled components com next
yarn add styled-components && yarn add -D @types/styled-components
mkdir -p src/styles/pages
touch src/styles/{Global.ts,/pages/Home.ts}

# ssr config for styled-components
# https://styled-components.com/docs/advanced#nextjs
yarn add -D babel-plugin-styled-components
touch babel.config.js src/pages/_document.tsx

# add code for _document.tsx from doc example

echo $(cat << EOF
module.exports = {\n
  preset: ['next/babel'],\n
  plugins: [['styled-components', { ssr: true }]],\n
};
EOF
) > babel.config.js

getServerSideProps x getStaticProps x getStaticPaths

  • getServerSideProps processa algo no servidor toda vez que a pagina é requisitada (SSR). Pode gerar gargalos caso o processamento demore muito.
  • getStaticProps (SSG) gera paginas estaticas. No ambiente de desenvolvimento isso não acontece, apenas em produção. para testar mode de produção gere um build e depois execute com yarn build && yarn start. o getStaticProps pode receber uma configuração de revalidate para gerar novamente a pagina estática em produção no momento de uma nova requisição. A propriedade revalidate recebe um valor numerico em segundos
  • Quando se está construindo paginas estaticas numa pagina com url dinamica com parametros, é necessário informar os possiveis paths ou pelo menos os principais para geração estatica. Isso é feito com a função getStaticPaths em conjunto com a getStaticProps. A getStaticPaths tem um parametro chamado fallback que quando recebe o valor true. Ele tenta gerar paginas não mapeadas nos paths ao tentar acessar a nova página. Ao utaz a opão de fallback como true, o useRouter passa a ter uma propriedade isFallback para tratamento de vizualização da pagina enquanto a mesma está sendo gerada pela primeira vez. a propriedade paths também pode ser um array vazio para que todas paginas sejam geradas dinamicamente na primeira vez e depois servidas de forma estática

  • a pasta pages pode estar na raiz ou em src apenas
  • A renderização do styled components no server precisa de uma configuração de plugin do babel e uma configuração em pages/_documents.tsx
  • Para usar rotas com parametros com id ou slug por exemplo, usamos um arquivo nomeado entre colchetes: ex: pages/produts/[slug].tsx. O slug representa uma string na url recuperada pelo objeto Router.useRouter().query do pacote next/router
  • TTFB = Time to first byte
  • Os parametros podem ser obtidos no componente de pagina com o useRouter ou a partir do contexto do useStaticProps, a query representa tanto parametros de rotas quando queryparams

  • página 404
  • import dinâmico para poupar o build da pagina no server. import denamico de funções e de componentes tambem com next/dynamic
  • .env na raiz .env.local fica só para voce localmente e não vai para o github
    • o arquivo .env fica na raiz do projeto juntamente com o diretorio public
    • você pode ter arquivos .env .env.development .env.production e .env.test para diferenciar os ambientes
    • caso não queira compartilhar alguma das variaveis de ambiente para outras pessoas e manter apenas localmente, use um .env.local que já está incluso no .gitignore
    • Variaveis de ambiente contem dados sensiveis e só estão disponiveis nas funções do server como getStaticProps e getServerSideProps
    • Se uma variavel de ambiente puder ser exposta como publica o nome dela deve ser prefixado com NEXT_PUBLIC

Paths do typescript

  • Abra o tsconfig.json e configure duas propriedades: baseUrl e paths para configurar caminhos de importação personalizados
  "baseUrl": "./src",
  "paths": {
    "@/*": ["./*"]
  },

SEO

curso-next's People

Contributors

javascripto avatar

Watchers

 avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.