Conceptos básicos de Next.js 14

1

Optimización Web con Next.js: Velocidad y Rendimiento Mejorados

2

Creación de Proyectos Next.js con TypeScript y App Router

3

Creación de Tienda Online con NextGIS y Shopify

4

Rutas Estáticas y Dinámicas en Next.js: Creación y Uso Práctico

5

Implementación de Layouts en Next.js: Globales y Locales

6

Navegación Optimizada con Next.js Usando el Componente Link

7

Rutas Dinámicas y Parámetros en Next.js: Implementación Práctica

8

Uso de React Server Components en Next.js: Cliente vs Servidor

9

Arquitectura de Componentes para Landing Page en Next.js

Quiz: Conceptos básicos de Next.js 14

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

10

Implementación de CSS Modules en Next.js para Estilizar Componentes

11

Instalación y Configuración de Sass en Next.js

12

Estilos Globales con SASS para Temas Oscuros en Aplicaciones Web

13

Agregar Archivos Estáticos en Next.js: Imágenes y Recursos Internos

14

Optimización de Imágenes con Next.js: Uso de Next.Image

15

Optimización y Responsividad con NextImage en Next.js

16

Optimización de Fuentes de Google en Next.js con Roboto

17

Estilos Dinámicos en React con Classnames y useState

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

Data Fetching en Next.js

18

Creación de Tienda en Shopify para Desarrollo con Next.js

19

Creación y uso de variables de entorno en Next.js

20

Consumo de APIs con Shopify y React Server Components

21

Implementación de Loader en Next.js para Carga de Productos

22

Implementación de Root Grouping en Next.js

23

Manejo de Errores en Next.js con React Error Boundary

Quiz: Data Fetching en Next.js

Next.js Avanzado

24

Manejo de Errores y Páginas 404 en Next.js

25

React Server Components en Next.js: Renderizado y Optimización

26

Diferencias entre archivos Template y Layout en Next.js

27

Arquitectura Escalable para Aplicaciones de Software

28

Creación de APIs con Next.js y Road Handlers

29

Configuración y Creación de Colecciones en Shopify

30

Patrones de Fetching en Next.js: Secuencial y Paralelo

31

Filtrado Dinámico de Productos en Shopify mediante API Collections

32

Uso de searchParams y params en componentes React cliente-servidor

33

Implementación de la Vista de Producto en TypeScript y React

34

Gestión de Caché en Next.js: Tipos y Recomendaciones Prácticas

35

Revalidación de Caché en Next.js: Endpoints por Tag y Path

36

Redirección en Next.js: Server y Client Components

37

Creación de un Componente React para Sanitizar HTML

38

SEO Dinámico y Estático en Next.js para Mejorar Posicionamiento Web

Quiz: Next.js Avanzado

Autenticación y autorización

39

Implementación de API GraphQL en Shopify para Autenticación Segura

40

Uso de Server Actions en Next.js para Formularios React

41

Implementación de Signup con GraphQL y Shopify

42

Implementación de Cookies de Acceso en Shopify con Next.js

43

Implementación de Flujo de Login con Tokens y Cookies

44

Validación de Access Tokens en Next.js con GraphQL y Cookies

45

Implementación de Carrito de Compras con React Icons

46

Manejo de estado global con Sustant en Next.js 13

47

Implementación de Carrito de Compras en JavaScript y CSS

48

Solución de errores de hidratación en carritos con Next.js y Shopify

49

Implementación de Middlewares en Next.js para Control de Acceso

Inteligencia Artificial

50

Implementación de Chatbots con Next.js y Vercel AI SDK

51

Creación de un Chatbot de Ventas con Personalidad y Contexto

Performance

52

Implementación de Parallel Routing en Next.js para Cargas Independientes

53

Análisis de Bundle en Next.js con Bundle Analyzer

Quiz: Performance

Frontend Ops

54

"Implementación del Edge Runtime en Next.js"

55

Despliegue de Aplicaciones NxJS en Vercel

56

Arquitectura de Proyectos Next.js para Entornos Empresariales

Quiz: Frontend Ops

Next.js es parte de tu nuevo stack

57

Next.js: Backend y Frontend con React Server Components

No tienes acceso a esta clase

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

Curso de Next.js 14

Curso de Next.js 14

Enrique Devars

Enrique Devars

Implementación de la Vista de Producto en TypeScript y React

33/57
Recursos

Aportes 11

Preguntas 0

Ordenar por:

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

Amo que ya esten hechos los componentes y el curso se enfoque en NEXT en lugar de explicar paso a paso el css y el html. 💚

no seria mas limpio crear un getProduct ? para no incrementar la logica en getProducts
Si les sale error del icono en ProductViewItemsOrder, solamente es instalar el paquete de iconos `npm install react-icons --save`
Hice un tipado de todo la data que nos entrega shopify por si quieren agregarlo a su proyecto export interface ProductTypes { id: number; title: string; body\_html: string; vendor: string; product\_type: string; created\_at: string; handle: string; updated\_at: string; published\_at: string; template\_suffix: any; published\_scope: string; tags: string; status: string; admin\_graphql\_api\_id: string; variants: Variant\[]; options: Option\[]; images: Image\[]; image: Image2;} export interface Variant { id: number; product\_id: number; title: string; price: string; sku: any; position: number; inventory\_policy: string; compare\_at\_price: string; fulfillment\_service: string; inventory\_management: any; option1: string; option2: any; option3: any; created\_at: string; updated\_at: string; taxable: boolean; barcode: any; grams: number; image\_id: any; weight: number; weight\_unit: string; inventory\_item\_id: number; inventory\_quantity: number; old\_inventory\_quantity: number; requires\_shipping: boolean; admin\_graphql\_api\_id: string;} export interface Option { id: number; product\_id: number; name: string; position: number; values: string\[];} export interface Image { id: number; alt: any; position: number; product\_id: number; created\_at: string; updated\_at: string; admin\_graphql\_api\_id: string; width: number; height: number; src: string; variant\_ids: any\[];} export interface Image2 { id: number; alt: any; position: number; product\_id: number; created\_at: string; updated\_at: string; admin\_graphql\_api\_id: string; width: number; height: number; src: string; variant\_ids: any\[];} ```js export interface ProductTypes { id: number; title: string; body_html: string; vendor: string; product_type: string; created_at: string; handle: string; updated_at: string; published_at: string; template_suffix: any; published_scope: string; tags: string; status: string; admin_graphql_api_id: string; variants: Variant[]; options: Option[]; images: Image[]; image: Image2; } export interface Variant { id: number; product_id: number; title: string; price: string; sku: any; position: number; inventory_policy: string; compare_at_price: string; fulfillment_service: string; inventory_management: any; option1: string; option2: any; option3: any; created_at: string; updated_at: string; taxable: boolean; barcode: any; grams: number; image_id: any; weight: number; weight_unit: string; inventory_item_id: number; inventory_quantity: number; old_inventory_quantity: number; requires_shipping: boolean; admin_graphql_api_id: string; } export interface Option { id: number; product_id: number; name: string; position: number; values: string[]; } export interface Image { id: number; alt: any; position: number; product_id: number; created_at: string; updated_at: string; admin_graphql_api_id: string; width: number; height: number; src: string; variant_ids: any[]; } export interface Image2 { id: number; alt: any; position: number; product_id: number; created_at: string; updated_at: string; admin_graphql_api_id: string; width: number; height: number; src: string; variant_ids: any[]; } ```
ahora, para que modificar el metodo de getProducts? en teoria esto deberia traernos todos los productos, no seria mas limpio crear un nuevo metodo que me traiga solo un producto segun el id? algo como getProduct? pregunto mas que nada para conocer bien la arquitectura de nextjs.
pregunta quizas innecesaria: 1.- cual es el standar para escribir los directorios que son asociados a una vista? con Mayuscula o minuscula? veo que tienes el directorio de Store con mayusculas y el directorio de products con minusculas, cual seria el correcto o el standard? o simplemente escribimos como queramos sin ninguna regla? gracias.
tengo el codigo igual al profesor y tambien he levantado el proyecto en la rama de los recursos del proyecto y no me funciona en ningun caso. No entiendo la verdad.
increible clase, tengo muchas ganas de usar los server components!
El `SyntheticEvent` es una abstracción del evento nativo del navegador. Esto le permite a React tener un comportamiento consistente en todos los navegadores.
He aplicado el principio de Responsabilidad Única (SRP) de SOLID al separar las funcionalidades en servicios distintos. En lugar de tener una sola función con dos responsabilidades, ahora tenemos dos funciones especializadas: una para obtener todos los productos y otra para obtener un producto específico. Esto mejora la mantenibilidad, legibilidad y escalabilidad del código. ```js import { env } from "@/config/env" import { shopifyUrls } from "./urls" // Función para transformar productos de la API a nuestro formato const transformProducts = (products: any[]): ProductType[] => { return products.map((product: any) => ({ id: product.id, title: product.title, description: product.body_html, price: parseFloat(product.variants[0].price), image: product.images[0].src, quantity: product.variants[0].inventory_quantity, handle: product.handle, tags: product.tags, })) } // Servicio para obtener todos los productos export const getProducts = async (): Promise<ProductType[]> => { try { const response = await fetch(shopifyUrls.products.all, { headers: new Headers({ 'X-Shopify-Access-Token': env.SHOPIFY_ACCES_TOKEN }) }) if (!response.ok) { throw new Error(`Error: ${response.status}`) } const { products } = await response.json() return transformProducts(products) } catch (error) { console.error('Error fetching products:', error) return [] } } // Servicio para obtener un solo producto por ID export const getProduct = async (id: string): Promise<ProductType | null> => { try { const response = await fetch(`${shopifyUrls.products.all}?ids=${id}`, { headers: new Headers({ 'X-Shopify-Access-Token': env.SHOPIFY_ACCES_TOKEN }) }) if (!response.ok) { throw new Error(`Error: ${response.status}`) } const { products } = await response.json() if (products.length === 0) { return null } // Transformamos y devolvemos el primer producto (debería ser el único) const transformedProducts = transformProducts(products) return transformedProducts[0] } catch (error) { console.error(`Error fetching product with id ${id}:`, error) return null } } ```import { env } from "@/config/env"import { shopifyUrls } from "./urls" // Función para transformar productos de la API a nuestro formatoconst transformProducts = (products: any\[]): ProductType\[] => {  return products.map((product: any) => ({    id: product.id,    title: product.title,    description: product.body\_html,    price: parseFloat(product.variants\[0].price),    image: product.images\[0].src,    quantity: product.variants\[0].inventory\_quantity,    handle: product.handle,    tags: product.tags,  }))} // Servicio para obtener todos los productosexport const getProducts = async (): Promise\<ProductType\[]> => {  try {    const response = await fetch(shopifyUrls.products.all, {      headers: new Headers({        'X-Shopify-Access-Token': env.SHOPIFY\_ACCES\_TOKEN      })    })        if (!response.ok) {      throw new Error(`Error: ${response.status}`)    }        const { products } = await response.json()    return transformProducts(products)  } catch (error) {    console.error('Error fetching products:', error)    return \[]  }} // Servicio para obtener un solo producto por IDexport const getProduct = async (id: string): Promise\<ProductType | null> => {  try {    const response = await fetch(`${shopifyUrls.products.all}?ids=${id}`, {      headers: new Headers({        'X-Shopify-Access-Token': env.SHOPIFY\_ACCES\_TOKEN      })    })        if (!response.ok) {      throw new Error(`Error: ${response.status}`)    }        const { products } = await response.json()        if (products.length === 0) {      return null    }        // Transformamos y devolvemos el primer producto (debería ser el único)    const transformedProducts = transformProducts(products)    return transformedProducts\[0]  } catch (error) {    console.error(`Error fetching product with id ${id}:`, error)    return null  }}
Wow me confundi un poco el mio no captura mis varaibles de entorno por que son de servidor tuve que agregar un una nueva variable de cliente en .env NEXT\_PUBLIC\_SHOPIFY\_HOSTNAME ademas me sale problema de cors.