CursosEmpresasBlogLiveConfPrecios

Reto: icon component

Clase 21 de 23 • Curso de React 17

Contenido del curso

Primeros pasos con React

  • 1
    Cómo aprender React.js

    Cómo aprender React.js

    08:20 min
  • 2
    Cuándo usar React.js

    Cuándo usar React.js

    13:27 min
  • 3
    Cambios en React 18: ReactDOM.createRoot

    Cambios en React 18: ReactDOM.createRoot

    01:21 min
  • 4
    Instalación con Create React App

    Instalación con Create React App

    19:13 min

Fundamentos de React: maquetación

  • 5
    Componentes de TODO Machine

    Componentes de TODO Machine

    20:31 min
  • 6
    JSX: componentes vs. elementos (y props vs. atributos)

    JSX: componentes vs. elementos (y props vs. atributos)

    16:15 min
  • 7
    CSS en React

    CSS en React

    17:54 min

Fundamentos de React: interacción

  • 8
    Manejo de eventos

    Manejo de eventos

    14:41 min
  • 9
    Manejo del estado

    Manejo del estado

    12:50 min
  • 10
    Contando y buscando TODOs

    Contando y buscando TODOs

    21:16 min
  • 11
    Completando y eliminando TODOs

    Completando y eliminando TODOs

    13:34 min

Fundamentos de React: escalabilidad

  • 12
    Organización de archivos y carpetas

    Organización de archivos y carpetas

    16:08 min
  • 13
    Persistencia de datos con Local Storage

    Persistencia de datos con Local Storage

    16:17 min
  • 14
    Custom Hook para Local Storage

    Custom Hook para Local Storage

    12:45 min
  • 15
    Manejo de efectos

    Manejo de efectos

    20:37 min
  • 16
    React Context: estado compartido

    React Context: estado compartido

    16:48 min
  • 17
    useContext

    useContext

    07:10 min

Modales y formularios

  • 18
    Portales: teletransportación de componentes

    Portales: teletransportación de componentes

    15:32 min
  • 19
    Formulario para crear TODOs

    Formulario para crear TODOs

    19:57 min

Retos

  • 20
    Reto: loading skeletons

    Reto: loading skeletons

    02:43 min
  • 21
    Reto: icon component

    Reto: icon component

    Viendo ahora

Próximos pasos

  • 22
    Deploy con GitHub Pages

    Deploy con GitHub Pages

    09:49 min
  • 23
    Toma el Curso de React.js: Patrones de Render y Composición

    Toma el Curso de React.js: Patrones de Render y Composición

    01:37 min
Tomar examen

Escuelas

  • Desarrollo Web
    • Fundamentos del Desarrollo Web Profesional
    • Diseño y Desarrollo Frontend
    • Desarrollo Frontend con JavaScript
    • Desarrollo Frontend con Vue.js
    • Desarrollo Frontend con Angular
    • Desarrollo Frontend con React.js
    • Desarrollo Backend con Node.js
    • Desarrollo Backend con Python
    • Desarrollo Backend con Java
    • Desarrollo Backend con PHP
    • Desarrollo Backend con Ruby
    • Bases de Datos para Web
    • Seguridad Web & API
    • Testing Automatizado y QA para Web
    • Arquitecturas Web Modernas y Escalabilidad
    • DevOps y Cloud para Desarrolladores Web
  • English Academy
    • Inglés Básico A1
    • Inglés Básico A2
    • Inglés Intermedio B1
    • Inglés Intermedio Alto B2
    • Inglés Avanzado C1
    • Inglés para Propósitos Específicos
    • Inglés de Negocios
  • Marketing Digital
    • Fundamentos de Marketing Digital
    • Marketing de Contenidos y Redacción Persuasiva
    • SEO y Posicionamiento Web
    • Social Media Marketing y Community Management
    • Publicidad Digital y Paid Media
    • Analítica Digital y Optimización (CRO)
    • Estrategia de Marketing y Growth
    • Marketing de Marca y Comunicación Estratégica
    • Marketing para E-commerce
    • Marketing B2B
    • Inteligencia Artificial Aplicada al Marketing
    • Automatización del Marketing
    • Marca Personal y Marketing Freelance
    • Ventas y Experiencia del Cliente
    • Creación de Contenido para Redes Sociales
  • Inteligencia Artificial y Data Science
    • Fundamentos de Data Science y AI
    • Análisis y Visualización de Datos
    • Machine Learning y Deep Learning
    • Data Engineer
    • Inteligencia Artificial para la Productividad
    • Desarrollo de Aplicaciones con IA
    • AI Software Engineer
  • Ciberseguridad
    • Fundamentos de Ciberseguridad
    • Hacking Ético y Pentesting (Red Team)
    • Análisis de Malware e Ingeniería Forense
    • Seguridad Defensiva y Cumplimiento (Blue Team)
    • Ciberseguridad Estratégica
  • Liderazgo y Habilidades Blandas
    • Fundamentos de Habilidades Profesionales
    • Liderazgo y Gestión de Equipos
    • Comunicación Avanzada y Oratoria
    • Negociación y Resolución de Conflictos
    • Inteligencia Emocional y Autogestión
    • Productividad y Herramientas Digitales
    • Gestión de Proyectos y Metodologías Ágiles
    • Desarrollo de Carrera y Marca Personal
    • Diversidad, Inclusión y Entorno Laboral Saludable
    • Filosofía y Estrategia para Líderes
  • Diseño de Producto y UX
    • Fundamentos de Diseño UX/UI
    • Investigación de Usuarios (UX Research)
    • Arquitectura de Información y Usabilidad
    • Diseño de Interfaces y Prototipado (UI Design)
    • Sistemas de Diseño y DesignOps
    • Redacción UX (UX Writing)
    • Creatividad e Innovación en Diseño
    • Diseño Accesible e Inclusivo
    • Diseño Asistido por Inteligencia Artificial
    • Gestión de Producto y Liderazgo en Diseño
    • Diseño de Interacciones Emergentes (VUI/VR)
    • Desarrollo Web para Diseñadores
    • Diseño y Prototipado No-Code
  • Contenido Audiovisual
    • Fundamentos de Producción Audiovisual
    • Producción de Video para Plataformas Digitales
    • Producción de Audio y Podcast
    • Fotografía y Diseño Gráfico para Contenido Digital
    • Motion Graphics y Animación
    • Contenido Interactivo y Realidad Aumentada
    • Estrategia, Marketing y Monetización de Contenidos
  • Desarrollo Móvil
    • Fundamentos de Desarrollo Móvil
    • Desarrollo Nativo Android con Kotlin
    • Desarrollo Nativo iOS con Swift
    • Desarrollo Multiplataforma con React Native
    • Desarrollo Multiplataforma con Flutter
    • Arquitectura y Patrones de Diseño Móvil
    • Integración de APIs y Persistencia Móvil
    • Testing y Despliegue en Móvil
    • Diseño UX/UI para Móviles
  • Diseño Gráfico y Arte Digital
    • Fundamentos del Diseño Gráfico y Digital
    • Diseño de Identidad Visual y Branding
    • Ilustración Digital y Arte Conceptual
    • Diseño Editorial y de Empaques
    • Motion Graphics y Animación 3D
    • Diseño Gráfico Asistido por Inteligencia Artificial
    • Creatividad e Innovación en Diseño
  • Programación
    • Fundamentos de Programación e Ingeniería de Software
    • Herramientas de IA para el trabajo
    • Matemáticas para Programación
    • Programación con Python
    • Programación con JavaScript
    • Programación con TypeScript
    • Programación Orientada a Objetos con Java
    • Desarrollo con C# y .NET
    • Programación con PHP
    • Programación con Go y Rust
    • Programación Móvil con Swift y Kotlin
    • Programación con C y C++
    • Administración Básica de Servidores Linux
  • Negocios
    • Fundamentos de Negocios y Emprendimiento
    • Estrategia y Crecimiento Empresarial
    • Finanzas Personales y Corporativas
    • Inversión en Mercados Financieros
    • Ventas, CRM y Experiencia del Cliente
    • Operaciones, Logística y E-commerce
    • Gestión de Proyectos y Metodologías Ágiles
    • Aspectos Legales y Cumplimiento
    • Habilidades Directivas y Crecimiento Profesional
    • Diversidad e Inclusión en el Entorno Laboral
    • Herramientas Digitales y Automatización para Negocios
  • Blockchain y Web3
    • Fundamentos de Blockchain y Web3
    • Desarrollo de Smart Contracts y dApps
    • Finanzas Descentralizadas (DeFi)
    • NFTs y Economía de Creadores
    • Seguridad Blockchain
    • Ecosistemas Blockchain Alternativos (No-EVM)
    • Producto, Marketing y Legal en Web3
  • Recursos Humanos
    • Fundamentos y Cultura Organizacional en RRHH
    • Atracción y Selección de Talento
    • Cultura y Employee Experience
    • Gestión y Desarrollo de Talento
    • Desarrollo y Evaluación de Liderazgo
    • Diversidad, Equidad e Inclusión
    • AI y Automatización en Recursos Humanos
    • Tecnología y Automatización en RRHH
  • Finanzas e Inversiones
    • Fundamentos de Finanzas Personales y Corporativas
    • Análisis y Valoración Financiera
    • Inversión y Mercados de Capitales
    • Finanzas Descentralizadas (DeFi) y Criptoactivos
    • Finanzas y Estrategia para Startups
    • Inteligencia Artificial Aplicada a Finanzas
    • Domina Excel
    • Financial Analyst
    • Conseguir trabajo en Finanzas e Inversiones
  • Startups
    • Fundamentos y Validación de Ideas
    • Estrategia de Negocio y Product-Market Fit
    • Desarrollo de Producto y Operaciones Lean
    • Finanzas, Legal y Fundraising
    • Marketing, Ventas y Growth para Startups
    • Cultura, Talento y Liderazgo
    • Finanzas y Operaciones en Ecommerce
    • Startups Web3 y Blockchain
    • Startups con Impacto Social
    • Expansión y Ecosistema Startup
  • Cloud Computing y DevOps
    • Fundamentos de Cloud y DevOps
    • Administración de Servidores Linux
    • Contenerización y Orquestación
    • Infraestructura como Código (IaC) y CI/CD
    • Amazon Web Services
    • Microsoft Azure
    • Serverless y Observabilidad
    • Certificaciones Cloud (Preparación)
    • Plataforma Cloud GCP

Platzi y comunidad

  • Platzi Business
  • Live Classes
  • Lanzamientos
  • Executive Program
  • Trabaja con nosotros
  • Podcast

Recursos

  • Manual de Marca

Soporte

  • Preguntas Frecuentes
  • Contáctanos

Legal

  • Términos y Condiciones
  • Privacidad
  • Tyc promociones
Reconocimientos
Reconocimientos
Logo reconocimientoTop 40 Mejores EdTech del mundo · 2024
Logo reconocimientoPrimera Startup Latina admitida en YC · 2014
Logo reconocimientoPrimera Startup EdTech · 2018
Logo reconocimientoCEO Ganador Medalla por la Educación T4 & HP · 2024
Logo reconocimientoCEO Mejor Emprendedor del año · 2024
De LATAM conpara el mundo
YoutubeInstagramLinkedInTikTokFacebookX (Twitter)Threads

      Por ahora los íconos de nuestra aplicación solo son etiquetas span con algún carácter representando la acción que conseguirán los usuarios al presionarlos. No está mal, funciona. Pero queremos reutilizar estos íconos fuera del componente TodoItem.

      Por eso el reto de esta clase es que crees tu propio componente TodoIcon, las reglas son:

      Te debe permitir elegir qué tipo de ícono quieres (marcar como completado, borrar o incluso algunos más que podamos necesitar). Cada ícono también debe poder tener estados (cambios al color o alguna otra propiedad del ícono para darle feedback a los usuarios de que realizaron alguna acción, como dar click o pasar el mouse por encima). Es válido que uses varios componentes en vez de solo uno para definir la lógica de tus íconos.

      Haz tu mayor esfuerzo por completar el reto y publicar tu solución en los comentarios. Luego de eso puedes ver mi propuesta de solución.

      Solución:

      La ventaja de usar letras para simular el comportamiento de nuestros íconos es que podemos cambiarles el color con CSS extremadamente fácil. La desventaja es que no son muy "estéticas".

      La ventaja de usar imágenes es que podemos tener la versión más estética de cada ícono. La desventaja es que no podemos cambiarles el color con CSS, necesitamos a fuerzas otra imagen con el nuevo color.

      Afortunadamente, tenemos una tercera alternativa con las ventajas de ambos mundos: svg.

      Las imágenes en SVG son diseñadas por la persona encargada del diseño, pero al exportarlas en formato SVG tenemos la imagen "maquetada" con etiquetas HTML que podemos modificar con CSS.

      Su única desventaja es la complejidad de su implementación. Pero somos hijas e hijos de Platzi, no vinimos para lo fácil, sino para nunca parar de aprender. ¡Así que a la carga!

      Empecemos creando un componente TodoIcon en su propia carpeta y con sus respectivos archivos de JavaScript y CSS:

      carbon (8).png

      Ahora debemos pensar qué propiedades pueden necesitar nuestros íconos, yo elegí las siguientes:

      type: para seleccionar qué ícono svg vamos a mostrar. color: para seleccionar el color de nuestro ícono svg, por defecto será gray. onClick: para invocar alguna función cuando le demos click al contenedor de nuestro ícono.

      Recuerda que los usuarios no siempre dan click o presionan la pantalla de sus celulares con completa precisión, por lo que es muy buena idea crear un contenedor invisible alrededor de nuestros íconos.

      :bulb: Material Design tiene una excelente guía sobre diseño de íconos, te recomiendo estudiarla para descubrir más detalles interesantes.

      Yo decidí utilizar una etiqueta span para el contenedor de los íconos. Así que este span recibirá la propiedad onClick, mientras que el SVG (que ya en un momento vamos a crear) recibirá las otras dos propiedades.

      También utilizaré la prop type para darle clases personalizadas a cada contenedor de mis íconos.

      carbon (9).png

      ¡Contenedor listo!

      Ahora debemos encargarnos de los SVG. Está perfecto si quieres hacerlos a mano con herramientas como Figma o Illustrator.

      En mi caso simplemente usaré alguna herramienta de íconos como Flaticon y descargaré los íconos que vea conveniente en la misma carpeta TodoIcon. De esta forma podremos importarlos como componentes de React gracias a la configuración por defecto que nos ofrece Create React App.

      Te recomiendo importar tus íconos SVG desde tus componentes en React de esta forma:

      carbon (10).png

      Que luego podremos llamar así:

      carbon (11).png

      Yo usaré dos íconos (uno de hecho y otro de delete):

      carbon (12).png

      Lo que nos falta es determinar cuál SVG mostrar dependiendo de la propiedad type que nos envíe el componente que llame a nuestro TodoIcon.

      Hay muchas formas de lograr esto, mi forma favorita es crear un objeto con todos los íconos que nuestro componente puede mostrar:

      carbon (13).png

      Y luego dentro de nuestro componente TodoIconllamamos al SVG que esté dentro de la propiedad con el mismo nombre que recibamos en la prop type:

      carbon (14).png

      Así automáticamente mostraremos el icono CheckSVG cuando la prop type tenga el valor check o el icono DeleteSVG cuando tenga el valor delete.

      Aunque hay un superpoder más que podemos usar. Si envolvemos nuestros íconos dentro de funciones vamos a poder enviarles propiedades que cambien su presentación o comportamiento.

      En este caso voy a usar esta funcionalidad para enviarle la prop color a nuestros SVG (y así cambiarles su color cuando los componentes que llamen a nuestros íconos así lo requieran).

      carbon (15).png

      El último paso para que nuestros componentes funcionen sería agregar nuestro código CSS al nuevo archivo de estilos TodoIcon.css (y de paso borrar el código que ya no necesitamos en TodoItem.css):

      carbon (16).png

      ¡Excelente! Nuestro componente TodoIcon ya funciona y podemos llamarlo desde el componente TodoItem para darle sus íconos mucho mejor configurados.

      Aunque antes quiero hacer un poco más de composición.

      Cada vez que llamamos a nuestro ícono debemos enviar varias props. Pero ¿qué tal si crearamos un componente que envíe todas esas props por nosotros?

      Lo que voy a hacer es crear dos nuevos componentes, CompleteIcon y DeleteIcon. Cada uno llamará al componente TodoIcon con sus respectivas props necesarias. Y luego podremos llamar mucho más fácil a estos dos nuevos componentes donde los necesitemos.

      carbon (17).png

      Y estos componentes ahora sí los llamaremos desde TodoItem:

      carbon (18).png

      Así seguiría construyendo mi componente TodoIcon con todos los íconos que vaya requiriendo nuestra aplicación TODO Machine.

      ¡Te espero en la siguiente clase para desplegar nuestra aplicación a GitHub Pages!

      👉 Aquí puedes encontrar el repositorio de este reto: Clase bonus 2: TodoIcon

      Comentarios

        Martín David Roldán

        Martín David Roldán

        student•
        hace 5 años

        Existe una librería de React donde solo tenemos que instalarla, importar el icono que queremos y ya podremos usarlo en nuestros componentes. .

        Instalación 🚀

        npm install react-icons --save

        Cómo usar la herramienta

        En nuestro componente, importar los iconos de la siguiente manera:

        import { NOMBRE_DEL_ICONO } from 'react-icons/CATEGORIA_DEL_ICONO'

        Pero… de donde obtengo los nombres y categorias de los iconos 🤔. Entren a su sitio web React Icons, escoge el que mas te guste y utilizalo en la parte de tu código en donde lo necesites. . ++Ejemplo:++

        import { FiArrowDownCircle } from 'react-icons/fi'
          Martín David Roldán

          Martín David Roldán

          student•
          hace 5 años

          Datos de vital importancia que olvide mencionar!

          Para usarlo, deben hacerlo igual que un componente. Por ejemplo:

          import { FiArrowDownCircle } from'react-icons/fi' const MiComponente = () => { return ( <div> <h3>Add a new task</h3> <button> <FiClipboard /> </button> </div> ) }

          También pueden usar props especiales para pasarle un tamaño o color sin tener que hacerlo mediante CSS.

          <button> <FiClipboard size="30px" color="#000000" /> </button>
          Luis Alejandro Vera Hernandez

          Luis Alejandro Vera Hernandez

          student•
          hace 5 años

          Ah caray, muchas gracias por este dato.

        Juan Pablo Jimenez

        Juan Pablo Jimenez

        student•
        hace 5 años

        Como mencionan los compañeros, react icons facilita mucho la vida Aquí dejo el video que vi para poder usarlo, espero les sirva y les guste
        https://www.youtube.com/watch?v=aor9hlcODUE&list=LL&index=3

          Joger Alexander Hernandez Colina

          Joger Alexander Hernandez Colina

          student•
          hace 5 años

          Muchas gracias!!!

          Max Andy Diaz Neyra

          Max Andy Diaz Neyra

          student•
          hace 4 años

          Excelente aporte!

        Rodrigo Abanto Blanco

        Rodrigo Abanto Blanco

        student•
        hace 5 años

        La manera más eficiente para resolver el reto es usando React Icons https://react-icons.github.io/react-icons. Seguir la documentación es super simple y sirve de práctica ya que durante la vida laboral, pasaremos mucho tiempo investigando si hay una solución ya hecha para un problema que tengamos.

        David Gustavo Lopez Figueroa

        David Gustavo Lopez Figueroa

        student•
        hace 5 años

        Antes de llegar a este reto ya habia resuelto el tema de iconos dinamicos, lo realicé con Font awesome:

        solo importas la herramienta poniendo esta etiqueta en el head de tu html:

        <script src="https://kit.fontawesome.com/8337609809.js" crossorigin="anonymous"></script>

        y con solo ponerle clases a tus elementos puedes convertirlos en un iconos de cientos su galeria gratuita:

        ejemplo:

        <span className={"delete-todo fas fa-trash"}

        de esta manera podemos modificar su color facilmente con css y responder a acciones de los usuarios con javascript de la siguiente manera:

        <span className={`${props.completed ? "fas fa-undo todo-undo": "check fas fa-check"}`} onClick={props.onComplete} > </span> <p className={`todo-description ${props.completed && "todoitem-p_completed"}`}>{props.text}</p>
        Arturo Keymurth Torres

        Arturo Keymurth Torres

        student•
        hace 4 años

        Mi solución fue ocupar react-icons. https://react-icons.github.io/react-icons

        import React from 'react'; import './TodoItem.css'; import { FiCheck, FiX } from "react-icons/fi"; function TodoItem(props) { return ( <li className='TodoItem'> <span className={`Icon Icon-check ${props.completed && 'Icon-check--active'}`} onClick={props.onComplete} > <FiCheck className=''/> </span> <p className={`TodoItem-p ${props.completed && 'TodoItem-p--completed'}`}> {props.text} </p> <span className='Icon Icon-delete' onClick={props.onDelete} > <FiX /> </span> </li> ); } export { TodoItem };
          Carlos Andres Poiche Soliz

          Carlos Andres Poiche Soliz

          student•
          hace 3 años

          Gracias mil

        Deyvis Neyser Valdez Gavilan

        Deyvis Neyser Valdez Gavilan

        student•
        hace 4 años

        react-icons es genial xd. .

        react-icons.png

          Mauricio Gonzalez Falcon

          Mauricio Gonzalez Falcon

          student•
          hace 3 años

          Font-Awesome es mi alternativa favorita, muy útil

        Rodrigo Milesi

        Rodrigo Milesi

        student•
        hace 5 años

        Mi solución 😁

        import React from 'react'; import './TodoIcon.css'; const contentIcon = { IconCheck:"ᄼ", IconDelete:"X", } const claseIcon = { IconCheck:"Icon Icon-check", IconDelete:"Icon Icon-delete", } const TodoIcon = ({icon, clickAction, addClase}) => { return( <span className={`${claseIcon[icon]} ${addClase || ""}`} onClick={clickAction} > {contentIcon[icon]} </span> ) } export default TodoIcon
        <TodoIcon icon="IconCheck" clickAction={onComplete} addClase={completed && 'Icon-check--active'} />
        Sara Ramírez Andrade

        Sara Ramírez Andrade

        student•
        hace 4 años

        Los iconos los agregué con React Icons, adiós agregar link de fontawesome

        react.png
        Diego Rojas

        Diego Rojas

        student•
        hace 4 años

        Sin duda alguna vale la pena aprender a usar la librería React Icons, todos los iconos están en formato svg, y su uso resulta muy sencillo además de ayudar al performance

        Fidel Moisés Apari Sánchez

        Fidel Moisés Apari Sánchez

        student•
        hace 3 años

        Este es mi humilde diseño, en la cual no cambie las clases o añadi elementos en TodoItem's sino que simplemente añadi algunas cosas al css: !Lol-ys

        Código css:

        .Icon-check { position: absolute; left: 12px; background-image: url('./img/off.jpg'); background-size: cover; background-position-x: -30px; background-repeat: no-repeat; } .Icon-check--active { color: #4caf50; background-image: url('./img/on.jpg'); } .Icon-delete { position: absolute; top: -24px; right: 0; } .Icon-delete:hover { color: red; }
        Marco Antonio Alducin Garcia

        Marco Antonio Alducin Garcia

        student•
        hace 3 años

        Pues siguiendo los comentarios de la comunidad, use ++npm install react-icons --save++ para cumplir el reto, y aquí están los resultados.

        Clase React  icon component 1.png
        Clase React  icon component 2.png
        Clase React  icon component 3.png
        Y lo hice un poco diferente a como comento Juan David en la nota, colocarlo por Hooks y los estilos controlarlos con css, al menos yo lo hice encerrando los iconos en la etiqueta <hx>. Lo que hice fue generar una carpeta ++Icons++ y ahí generar los index.js pero con la acción que tendrá el icono. Cada uno los puse de este modo:

        import React from 'react'; import { AiOutlineFileAdd } from 'react-icons/ai'; function IconAdd(){ return ( <React.Fragment> <h3><AiOutlineFileAdd /></h3> </React.Fragment> ); } export {IconAdd};

        Tomando en cuenta el nombre del icono, pero sobretodo, la libreria de React Icons de donde estan exportando el icono. asi con todos los iconos.

        import React from 'react'; **import { IconCheck } from '../Icons/IconCheck';** **import { IconDelete } from '../Icons/IconDelete';** import './TodoItem.css'; function TodoItem(props) { return ( <li className="TodoItem"> {/* agregar condicionales en string con variables de javacript */} <span className={`pendiente ${props.completed && 'correcto'}`} onClick={props.onComplete}>**_++<IconCheck />++_**</span> <p className={`${props.completed && 'cumplido'}`}>{ props.text }</p> {/* Declarando una funcion en un evento, cuando no se le envia argumentos a la misma, no se esta llamando a la ejecucion */} <span className="Eliminar" onClick={props.onDelete}>**_++<IconDelete />++_**</span> </li> ); } export { TodoItem };

        Espero y les pueda ayudar.

        Alan Dromundo Arias

        Alan Dromundo Arias

        student•
        hace 3 años

        Completé el reto sin usar esto jaja. Pero ahora veo que existe react-icons, otra cosa que hace que ame más a React. Si hago otro proyecto (que será que sí), aplicaré este de react-icon, ahora mismo funciona así como está.

        Ricardo Gomez

        Ricardo Gomez

        student•
        hace 3 años

        Aprendí un resto, gracias

        Xavier Araque

        Xavier Araque

        student•
        hace 4 años
        Captura de pantalla 2022-09-11 a las 23.53.10.png
        import React, { useContext } from 'react'; import { Flex, Stack, Switch, Text, IconButton } from '@chakra-ui/react' import { TodoContext } from '../Context'; import { CloseIcon } from '@chakra-ui/icons' import { motion } from 'framer-motion' const TodoItem = ({todo}) =>{ const { completeTodo, deleteTodo } = useContext(TodoContext); return ( <Stack as={motion.div} initial={{ opacity: 0, scale: 0.5 }} animate={{ opacity: 1, scale: 1 }} transition={{ duration: 0.5 }} direction='row' justifyContent={'space-between'} > <Flex alignItems={'baseline'} gap={'5px'} > <Switch colorScheme='todo' size='sm' onChange={() => completeTodo(todo.text)} isChecked={todo.completed} /> <Text>{todo.text}</Text> </Flex> <IconButton isRound colorScheme='todo' size={'xs'} aria-label='Delete Task' icon={<CloseIcon />} onClick={() => deleteTodo(todo.text)} /> </Stack> ) } export default TodoItem;
        CHRISTIAN OLIVER SOLANO NUÑEZ

        CHRISTIAN OLIVER SOLANO NUÑEZ

        student•
        hace 4 años

        he utilizado svg para el check y css puro para eliminar

        todo.png
        Gilbert Ardila

        Gilbert Ardila

        student•
        hace 4 años

        Mi función paa le icono

        function TodoIcon({icon,class_name,onClick}){ return( <span className={class_name} onClick={onClick}>{icon}</span> ); } export {TodoIcon};
        <TodoIcon icon='☑' class_name={`TodoItem-span ${props.completed && 'Icon-check--active'}`} onClick={props.onComplete}/>
        Nelson Rodolfo Boche Santos

        Nelson Rodolfo Boche Santos

        student•
        hace 4 años

        Yo utilicé react-icons

        <code> <button className={`Icon-container Icon-container--${type}`} onClick={onClick}> {type ==='delete' && <AiTwotoneDelete color='red' size ={40}/>} {type ==='check' && <AiFillCheckSquare color = {color } size ={40}/>} </button> <code/>
        Angel Rojas

        Angel Rojas

        student•
        hace 4 años

        Cambio el color del icono a través de clases intente con la propiedad fill como en ejemplo pero no pude supongo que debe de haber algo diferente en mis svg.

        Captura de Pantalla 2022-06-08 a la(s) 18.33.33.png
        Captura de Pantalla 2022-06-08 a la(s) 18.33.44.png
        Captura de Pantalla 2022-06-08 a la(s) 18.33.50.png

          Juan Castro

          Juan Castro

          teacher•
          hace 4 años

          Muestra tu SVG. :eyes:

        Rene Gomez

        Rene Gomez

        student•
        hace 4 años

        se puede usar icodify también y esta para mas framework aparte de react también para vue :V

        Holman Alberto Plazas Sanchez

        Holman Alberto Plazas Sanchez

        student•
        hace 4 años

        En mi caso usé FONTAWESOME solo es cuestión de agregar esta etiqueta al HEAD de HTML <script src="https://kit.fontawesome.com/07d6162b49.js" crossorigin="anonymous"></script> y ya en cualquier componente solo es insertar la etiqueta <i/> con los valores que tiene para cada icono en su sitio web https://fontawesome.com/