Conceptos básicos de Next.js 14

1

¿Qué es Next.js y por qué aprenderlo si quieres ser frontend senior?

2

Arquitectura de un proyecto de Next.js

3

Herramientas y stack utilizado en el curso

4

Cómo crear rutas en Next.js

5

Cómo crear Layout en Next.js

6

Cómo funciona la navegación en Next.js

7

Manejo de parámetros en rutas en Next.js

8

React Server Components en Next.js: notación "use Client"

9

Creación de arquitectura de landing page en Next.js

Quiz: Conceptos básicos de Next.js 14

Manejo de estilos y estáticos en Next.js 14

10

CSS Modules en Next.js 13

11

Uso de Sass en Next.js

12

Cómo utilizar estilos globales en Next.js

13

Cómo agregar archivos estáticos en Next.js

14

Manejo y optimización de imágenes con Next Image

15

Optimización del componente image en Next.js

16

Optimización de fuentes con Next.js

17

Creando estilos dinámicos aplicando condicionales en Next.js

Quiz: Manejo de estilos y estáticos en Next.js 14

Data Fetching en Next.js

18

Creación de tienda de Shopify para un proyecto en Next.js

19

Manejo de variables de entorno en Next.js

20

Cómo obtener información de una API con Next.js

21

Manejo de estado de carga con el archivo loading.tsx

22

Route Grouping en Next.js

23

Manejo de errores en la UI con el archivo error.tsx

Quiz: Data Fetching en Next.js

Next.js Avanzado

24

Implementando páginas de Not Found y error global

25

Cómo impactan los React Server Components en un proyecto en Next.js

26

Cuándo utilizar layout o template en Next.js

27

Arquitectura profesional para data fetching en un proyecto en Next.js

28

Next.js para backend: manejando rutas con archivos Route Handlers

29

Proyecto: implementando la página de tienda

30

Patrones de data fetching en Next.js

31

Proyecto: filtrando categorías de productos

32

Data fetching de parámetros en el servidor y cliente

33

Proyecto: página de producto y arreglos en el sitio

34

Cómo funciona el Fetch y el Caché de Next.js

35

Revalidando cache con revalidateTag y revalidatePath en Next.js

36

Cómo hacer redirects en Next.js

37

Proyecto: HTML dinámico en la descripción del producto

38

Mejorando SEO de una página en Next.js

Quiz: Next.js Avanzado

Autenticación y autorización

39

Manejando autenticación y autorización con Storefront APÏ de Shopify

40

Server Actions en Next.js

41

Proyecto: proceso de Sign-Up con GraphQL

42

Manejo de cookies para colocar un token de acceso de un proyecto en Next.js

43

Cómo implementar un flujo de login en un proyecto en Next.js

44

Validando token de acceso de usuario en un proyecto en Next.js

45

Proyecto: implementando el carrito de compras

46

Manejo de estado global con zustand en Next.js

47

Proyecto: agregando items al carrito de compras

48

Cómo integrar el checkout de Shopify a un proyecto en Next.js

49

Implementar middleware en proyecto en Next.js para protección de rutas

Inteligencia Artificial

50

Creando componente de chatbot de ventas con la SDK IA de Vercel

51

Implementación de un bot de ventas en una app Next.js

Performance

52

Optimización de carga con parallel routing en Next.js

53

Análisis de bundle para Next.js 14

Quiz: Performance

Frontend Ops

54

Edge runtime

55

Despliegue de un proyecto Next.js en Vercel

56

Mejores prácticas en arquitecturas empresariales

Quiz: Frontend Ops

Next.js es parte de tu nuevo stack

57

¡Has creado un proyecto en Next.js!

No tienes acceso a esta clase

¡Continúa aprendiendo! Únete y comienza a potenciar tu carrera

No se trata de lo que quieres comprar, sino de quién quieres ser. Aprovecha el precio especial.

Antes: $249

Currency
$209

Paga en 4 cuotas sin intereses

Paga en 4 cuotas sin intereses
Suscríbete

Termina en:

12 Días
21 Hrs
9 Min
56 Seg
Curso de Next.js 14

Curso de Next.js 14

Enrique Devars

Enrique Devars

Cómo crear Layout en Next.js

5/57
Recursos

Aportes 8

Preguntas 2

Ordenar por:

¿Quieres ver más aportes, preguntas y respuestas de la comunidad?

Se puede personalizar aun mas el titulo de la pagina. Al definir el titulos en el root del layout podemos agregar un titulo por defecto y una plantilla de titulo de la siguiente forma: ```js import type { Metadata } from "next"; export const metadata: Metadata = { title: { template: "%s | Future world", default: "Future world", }, description: "Generated by create next app", }; ```Ahora si en la pagina dinamica de **Category** agregamos el titulo de la pagina: ```js import type { Metadata } from "next"; export const metadata: Metadata = { title: "Categorias", }; ``` El titulo de la pagina se mostrara asi **Categorias | Future world.** Y asi para cada pagina en la que agreuemos un titulo en especifico. Si no agregamos un titulo se mostrara el titulo por defecto: **Future world**
Llevo ya un año usando Page Router, ¡Siento que me va a costar adaptarme a esto de App Router!
¿Qué es un Layout? Es todo elemento que siempre va a estar presente en mi aplicación como un wrapper, sin importar que cambie de página se va a visualizar (ej: header, footer, sidemenu, etc) los layouts siempre resuelven de manera jerarquica Existen 2 tipos de Layout: LAYOUT GLOBAL: ROOT LAYOUT, envuelve a toda la aplicación LAYOUT LOCAL: Por rutas del fileSystem, envuelve sólo a su ruta
# How to create a Layout in Next.js In the realm of web development, a layout encompasses everything that repeats across your application. Common elements within a layout include the navbar, an aside, a footer, and so forth. Layouts can take various forms, ranging from one for the entire application, to specific sections or even individual pages. Now, let’s delve into how the default layout actually operates: * `📂**/app/layout.tsx**` import type { Metadata } from 'next' import { Inter } from 'next/font/google' import './globals.css' // Establishing the font const inter = Inter({ subsets: \['latin'] }) // Changing metadata information export const metadata: Metadata = { title: 'Create Next App', description: 'Generated by create next app', } // The layout file itself export default function RootLayout({ children, }: { children: React.ReactNode }) { return ( \<html lang="en"> \<body className={inter.className}> <> {/\* The \

will appear on the whole app \*/} \

My app\

{children} \ \</body> \</html> ) } Note that the layout receives a `children` parameter. This `children` is, in fact, the `page.tsx` file within the folder where we are working. \-- \*\*app/\*\*📂 \-- layout.tsx <- Acts as the father of page.tsx \-- page.tsx <- Acts as the child of layout.tsx \-- \*\*app/example\*\*📂 \-- page.tsx <- Still actting as the child of layout.tsx \-- \*\*app/example2\*\*📂 \-- layout.tsx <- It only alters the page.tsx within this folder \-- page.tsx It’s essential to understand that the `page.tsx` in the `app` folder doesn’t alter the `page.tsx` in the `app/example` folder in any way. Only the `layout.tsx` holds this role. This structure ensures a clean separation of concerns, allowing for a hierarchical relationship where the layout serves as the overarching structure, and individual pages or sections can customize their content without affecting the layout of the entire application.
Se puede personalizar aun mas el titulo de la pagina. Al definir el titulos en el root del layout podemos agregar un titulo por defecto y una plantilla de titulo de la siguiente forma: ```jsx import type { Metadata } from "next"; export const metadata: Metadata = { title: { template: "%s | Future world", default: "Future world", }, description: "Generated by create next app", }; ``` Ahora si en la pagina dinamica de \*\*Category\*\* agregamos el titulo de la pagina: ```jsx import type { Metadata } from "next"; export const metadata: Metadata = { title: "Categorias", }; ``` El titulo de la pagina se mostrara asi \*\*Categorias | Future world.\*\* Y asi para cada pagina en la que agreuemos un titulo en especifico. Si no agregamos un titulo se mostrara el titulo por defecto: \*\*Future world\*\* Para la pagina de categorias dinamicas recomiendo: <https://nextjs.org/docs/app/api-reference/functions/generate-metadata> ``` import type { Metadata, ResolvingMetadata } from "next"; interface CategoryProps { params: { category: string; }; } export async function generateMetadata( { params }: CategoryProps, parent: ResolvingMetadata ): Promise\<Metadata> { const { category } = params; // Human friendly slug const title = category .split("-") .map((word) => word.charAt(0).toUpperCase() + word.slice(1)) .join(" "); return { title: title, } } ```

CLASE5 Resumen 28/02/2024

Los archivos especiales layout, pages y templates permiten crear un UI para una ruta.

LAYOUT

Un Layout es un UI que es compartido entre multiples rutas, pueden preserva su estado, seguir siendo interactivos y no se vuelven a re-renderizar. Recordar que cuando usamos layout es obligatorio aceptar la prop “children” para que pueda ser compartida con otros componentes.

Por ejemplo, el layout sera compartido con /dashboard y /dashboard/settings pages.

ROOT LAYOUT

Es todo aquello que siempre va a estar presente en la aplicacion y sin importar que cambies de pagina se va a visualizar como por ejemplo el header, el footer, alguna barra de navegación específica y suele haber diferentes tipos de layout para cada parte de la aplicación. Por lo general se ubica en el folder /app y solo él puede contener etiquetas <html> y <body>.
No es posible pasar datos entre un layout padre y sus hijos. Sin embargo, puedes obtener los mismos datos en una ruta más de una vez, y React deducirá automáticamente las solicitudes sin afectar al rendimiento.

LOCAL LAYOUT o NESTING LAYOUTS

Este puede ir ubicado dentro de cada segmento de ruta que vayamos anidando reflejando un comportamiento del root layout pero respetando los niveles jerarquicos de los layouts superiores.

PAGES

Una “PAGE.TSX” es un UI que es unico en una ruta y puede existir en cada folder, ademas pueden hacer fetch a la data del lado del servidor dado que por defecto son server components.

TEMPLATES

Muy similar a los layouts en la forma que envuelven a los layout hijos o las pages.

A diferencia de los layouts que persiten en las rutas y mantienen estados, los templates crean una nueva instancia para cada uno de sus hijos en la navegación, en otras palabras cuando navegas entre templates se monta la nueva instancia del componente, se recrea los elementos del DOM, no guarda estados y se vuelven a sincronizar sus efectos.

- Casos de uso:
    - Caracteristicas que usen useEffect (logging pages) y useState (pagina de formularios de comentarios)

El Template component debe incluir el children prop.

<Layout>
  {/* Note that the template is given a unique key. */}
  <Template key={routeParam}>{children}</Template>
</Layout>

METADATA

En el app directory, existe el archivo “page” en el que puedes modificar elementos del tag “head” como title y meta usando los metadata apis.

La metada puede ser definida exportando el objeto “metadata” o la funcion generateMetadata en un archivo layout o page.

Interesante, no sabía que no es necesario importar el Layout, ahora entiendo que solo basta con crear el Layout.tsx en la anidación del directorio donde queremos que este.
Buenisimo y muy bien explicado el Layout