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. Invierte en tu educación con el precio especial

Antes: $249

Currency
$209

Paga en 4 cuotas sin intereses

Paga en 4 cuotas sin intereses
Suscríbete

Termina en:

10 Días
21 Hrs
33 Min
2 Seg
Curso de Next.js 14

Curso de Next.js 14

Enrique Devars

Enrique Devars

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

48/57
Recursos

Aportes 11

Preguntas 1

Ordenar por:

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

Antes de empezar lo mejor que pueden hacer es eliminar el localstorage de su navegador type CartItem = { title: string; price: number; quantity: number; id: string; image: string; merchandiseId: string;}; luego deben implementar algunas cosas en su typescript y enviar parametros para que funcione ```js //types.d.ts type CartItem = { title: string; price: number; quantity: number; id: string; image: string; merchandiseId: string; }; //ProductViewItemsOrder.tsx const { title, id, price, quantity, image, gql_id } = product; addToCart({ title, id, price, quantity, image, merchandiseId: gql_id, }); ```
lo mejor que se puede hacer es eliminar el localstorage y luego integrar los siguiente//types.d.ts type CartItem = { title: string; price: number; quantity: number; id: string; image: string; merchandiseId: string; }; //ProductViewItemsOrder.tsx const { title, id, price, quantity, image, gql\_id } = product; addToCart({ title, id, price, quantity, image, merchandiseId: gql\_id, }); ```js //types.d.ts type CartItem = { title: string; price: number; quantity: number; id: string; image: string; merchandiseId: string; }; //ProductViewItemsOrder.tsx const { title, id, price, quantity, image, gql_id } = product; addToCart({ title, id, price, quantity, image, merchandiseId: gql_id, }); ```
Por que usar `window.location.href` en vez de `router.reload`.?```js ```
Chicos les comento como solucione el error, estuve investigando varios foros y la documentacion y al final me di cuenta ![](https://static.platzi.com/media/user_upload/image-584b658d-2d1d-44ef-bc25-bddc13b6906b.jpg) Cuando le enviamos el merchandiseId del product me botaba ese error, lo que hice fue utilizar el merchandiseId de la variante del producto de esta forma el codigo funciona normal :D ![](https://static.platzi.com/media/user_upload/image-1fc65b86-f416-4528-962b-66598b7080ed.jpg)
a mi no me esta funcionando el button de buy y me esta dando el siugiente error: ![](https://static.platzi.com/media/user_upload/image-5f0947d1-3b03-4a18-800c-e68586757f51.jpg) Error: Variable $input of type CartInput was provided invalid value for lines.0.merchandiseId (Expected value to not be null): {"response":{"errors":\[{"message":"Variable $input of type CartInput was provided invalid value for lines.0.merchandiseId (Expected value to not be null)","locations":\[{"line":2,"column":21}],"extensions":{"value":{"buyerIdentity":{"customerAccessToken":"02937e824843ecebb32012e95be67127","email":"[email protected]"},"lines":\[{"quantity":3}]},"problems":\[{"path":\["lines",0,"merchandiseId"],"explanation":"Expected value to not be null"}]}}],"status":200,"headers":{}},"request":{"query":"\nmutation cartCreate($input: CartInput) {\n cartCreate(input: $input) {\n cart {\n checkoutUrl\n }\n userErrors {\n code\n field\n message\n }\n }\n}\n\n","variables":{"input":{"buyerIdentity":{"customerAccessToken":"02937e824843ecebb32012e95be67127","email":"[email protected]"},"lines":\[{"quantity":3}]}}}} at makeRequest (webpack-internal:///(action-browser)/./node\_modules/graphql-request/build/esm/index.js:288:15) at process.processTicksAndRejections (node:internal/process/task\_queues:95:5) at async handleCreateCart (webpack-internal:///(action-browser)/./src/actions/index.ts:71:28) at async C:\Users\ivan camilo\Documents\personal\programacion\platzi\next-js\store-nextjs\node\_modules\next\dist\compiled\next-server\app-page.runtime.dev.js:39:406 at async t0 (C:\Users\ivan camilo\Documents\personal\programacion\platzi\next-js\store-nextjs\node\_modules\next\dist\compiled\next-server\app-page.runtime.dev.js:38:5773) at async rh (C:\Users\ivan camilo\Documents\personal\programacion\platzi\next-js\store-nextjs\node\_modules\next\dist\compiled\next-server\app-page.runtime.dev.js:39:23636) at async doRender (C:\Users\ivan camilo\Documents\personal\programacion\platzi\next-js\store-nextjs\node\_modules\next\dist\server\base-server.js:1391:30) at async cacheEntry.responseCache.get.routeKind (C:\Users\ivan camilo\Documents\personal\programacion\platzi\next-js\store-nextjs\node\_modules\next\dist\server\base-server.js:1552:28) at async DevServer.renderToResponseWithComponentsImpl (C:\Users\ivan camilo\Documents\personal\programacion\platzi\next-js\store-nextjs\node\_modules\next\dist\server\base-server.js:1460:28) at async DevServer.renderPageComponent (C:\Users\ivan camilo\Documents\personal\programacion\platzi\next-js\store-nextjs\node\_modules\next\dist\server\base-server.js:1843:24) at async DevServer.renderToResponseImpl (C:\Users\ivan camilo\Documents\personal\programacion\platzi\next-js\store-nextjs\node\_modules\next\dist\server\base-server.js:1881:32) at async DevServer.pipeImpl (C:\Users\ivan camilo\Documents\personal\programacion\platzi\next-js\store-nextjs\node\_modules\next\dist\server\base-server.js:909:25) at async NextNodeServer.handleCatchallRenderRequest (C:\Users\ivan camilo\Documents\personal\programacion\platzi\next-js\store-nextjs\node\_modules\next\dist\server\next-server.js:266:17) at async DevServer.handleRequestImpl (C:\Users\ivan camilo\Documents\personal\programacion\platzi\next-js\store-nextjs\node\_modules\next\dist\server\base-server.js:805:17)
Se presenta el error de hidratacion porque en el servidor el carrito se queda vacio, pero en el cliente se actualiza los cambios, no es cierto? Y esto se debe al manejo del localstorage que no tiene accesso el servidor? No entendi bien esa parte, pero al hacer logs, el carrito en el servidor esta vacio por mas que tenga productos, solo aparece en el cliente.
Hola... tenia un problema al crear el checkout, pues estaba usando la API del 2024-07, debes asegurarse de usar la API Storefront del 2023-10 esta en el archivo .env
Hola, después de revisar bien la documentación de next JS encontré ala solicitud a mi problema de redirección. En resumen la idea es que si estamos usando un server action, no deberíamos hacer redirecciones dentro de un try catch. El problema es que cuando redireccionamos al parecer toma esto como un objeto de error: ![](https://static.platzi.com/media/user_upload/image-ef374ccf-02f7-4643-ba51-3bc4e0bfc582.jpg) Lo mejor en estos casos es limitar el scope de uso del try catch a chunks de código más pequeños y organizados. Les dejo el foro por si lo quieren leer: <https://github.com/vercel/next.js/issues/58263>
Tengo un problema y es que solo me deja agregar al carrito una sola vez
Me estaba dando problema esa manera de importar en el dynamic, lo solucioné con esto: `const NoSSRShoppingCart = dynamic(  () =>    import('@/components/shared/ShoppingCart').then(mod => mod.ShoppingCart),  {    ssr: false,  });`
me percate de un error en el codigo. Estamos tomando el quantity del producto y deberia ser el quantity del input addToCart({ title, id, price, quantity: counter, image, merchandiseId: gql\_id, }); asi lo solucionamos en ProductViewItemsOrder.tsx ```js addToCart({ title, id, price, quantity: counter, image, merchandiseId: gql_id, }); ```