En este proyecto, vamos a aplicar los conocimientos adquiridos en los módulos anteriores para construir una aplicación de lista de tareas (To-Do List) utilizando Vue.js. Este proyecto te permitirá consolidar conceptos clave como componentes, gestión de estado, y enrutamiento.
Objetivos del Proyecto
- Crear una aplicación Vue.js desde cero.
- Utilizar componentes para estructurar la aplicación.
- Implementar Vue Router para la navegación.
- Gestionar el estado de la aplicación con Vuex.
- Aplicar directivas y bindings para la interacción del usuario.
Estructura del Proyecto
- Configuración del Proyecto
- Creación de Componentes
- Gestión del Estado con Vuex
- Implementación de Vue Router
- Estilización y Mejoras
- Configuración del Proyecto
Paso 1: Crear un Nuevo Proyecto Vue
Primero, asegúrate de tener Vue CLI instalado. Si no lo tienes, instálalo con el siguiente comando:
Luego, crea un nuevo proyecto:
Selecciona las opciones predeterminadas o personaliza según tus necesidades.
Paso 2: Instalar Dependencias Adicionales
Vamos a necesitar Vue Router y Vuex. Instálalos con los siguientes comandos:
- Creación de Componentes
Paso 1: Estructura de Componentes
Vamos a crear los siguientes componentes:
TodoList.vue
: Para mostrar la lista de tareas.TodoItem.vue
: Para representar cada tarea individual.AddTodo.vue
: Para añadir nuevas tareas.
Paso 2: Implementación de TodoList.vue
<template> <div> <h1>Lista de Tareas</h1> <AddTodo /> <ul> <TodoItem v-for="todo in todos" :key="todo.id" :todo="todo" /> </ul> </div> </template> <script> import { mapState } from 'vuex'; import AddTodo from './AddTodo.vue'; import TodoItem from './TodoItem.vue'; export default { components: { AddTodo, TodoItem }, computed: { ...mapState(['todos']) } }; </script>
Paso 3: Implementación de TodoItem.vue
<template> <li> <input type="checkbox" v-model="todo.completed" @change="toggleComplete" /> <span :class="{ completed: todo.completed }">{{ todo.text }}</span> <button @click="removeTodo">Eliminar</button> </li> </template> <script> export default { props: ['todo'], methods: { toggleComplete() { this.$store.commit('toggleComplete', this.todo.id); }, removeTodo() { this.$store.commit('removeTodo', this.todo.id); } } }; </script> <style scoped> .completed { text-decoration: line-through; } </style>
Paso 4: Implementación de AddTodo.vue
<template> <div> <input v-model="newTodo" @keyup.enter="addTodo" placeholder="Añadir nueva tarea" /> <button @click="addTodo">Añadir</button> </div> </template> <script> export default { data() { return { newTodo: '' }; }, methods: { addTodo() { if (this.newTodo.trim()) { this.$store.commit('addTodo', this.newTodo); this.newTodo = ''; } } } }; </script>
- Gestión del Estado con Vuex
Paso 1: Configuración de Vuex
Crea un archivo store.js
en la carpeta src
y configura Vuex:
import Vue from 'vue'; import Vuex from 'vuex'; Vue.use(Vuex); export default new Vuex.Store({ state: { todos: [] }, mutations: { addTodo (state, text) { state.todos.push({ id: Date.now(), text, completed: false }); }, toggleComplete (state, id) { const todo = state.todos.find(todo => todo.id === id); if (todo) { todo.completed = !todo.completed; } }, removeTodo (state, id) { state.todos = state.todos.filter(todo => todo.id !== id); } } });
Paso 2: Integrar Vuex en la Aplicación
En main.js
, importa y usa el store:
import Vue from 'vue'; import App from './App.vue'; import store from './store'; Vue.config.productionTip = false; new Vue({ store, render: h => h(App) }).$mount('#app');
- Implementación de Vue Router
Paso 1: Configuración de Rutas
Crea un archivo router.js
en la carpeta src
y configura Vue Router:
import Vue from 'vue'; import Router from 'vue-router'; import TodoList from './components/TodoList.vue'; Vue.use(Router); export default new Router({ routes: [ { path: '/', name: 'TodoList', component: TodoList } ] });
Paso 2: Integrar Vue Router en la Aplicación
En main.js
, importa y usa el router:
import Vue from 'vue'; import App from './App.vue'; import router from './router'; import store from './store'; Vue.config.productionTip = false; new Vue({ router, store, render: h => h(App) }).$mount('#app');
- Estilización y Mejoras
Paso 1: Añadir Estilos Globales
Crea un archivo styles.css
en la carpeta src
y añade algunos estilos básicos:
body { font-family: Arial, sans-serif; } h1 { color: #42b983; } button { background-color: #42b983; color: white; border: none; padding: 5px 10px; cursor: pointer; } button:hover { background-color: #369f7d; }
Importa este archivo en main.js
:
Conclusión
En este proyecto, hemos creado una aplicación de lista de tareas utilizando Vue.js. Hemos cubierto la creación de componentes, la gestión del estado con Vuex, y la navegación con Vue Router. Este proyecto te proporciona una base sólida para construir aplicaciones más complejas con Vue.js.
Próximos Pasos:
- Experimenta añadiendo nuevas funcionalidades, como la edición de tareas.
- Implementa persistencia de datos utilizando Local Storage o una API backend.
- Explora más sobre la optimización del rendimiento y pruebas en Vue.js.
¡Felicidades por completar tu primera aplicación Vue.js!
Curso de Vue.js
Módulo 1: Introducción a Vue.js
- ¿Qué es Vue.js?
- Configuración del Entorno de Desarrollo
- Creando Tu Primera Aplicación Vue
- Entendiendo la Instancia de Vue
Módulo 2: Conceptos Básicos de Vue.js
- Sintaxis de Plantillas
- Vinculación de Datos
- Propiedades Computadas y Observadores
- Vinculación de Clases y Estilos
- Renderizado Condicional
- Renderizado de Listas
Módulo 3: Componentes de Vue.js
- Introducción a los Componentes
- Props y Eventos Personalizados
- Slots
- Componentes Dinámicos y Asíncronos
- Comunicación entre Componentes
Módulo 4: Vue Router
- Introducción a Vue Router
- Configuración de Vue Router
- Rutas Dinámicas
- Rutas Anidadas
- Guardias de Navegación
Módulo 5: Gestión de Estado con Vuex
- Introducción a Vuex
- Estado, Getters, Mutaciones y Acciones
- Módulos en Vuex
- Usando Vuex en Componentes
- Patrones Avanzados de Vuex
Módulo 6: Directivas de Vue.js
Módulo 7: Plugins de Vue.js
Módulo 8: Pruebas en Vue.js
- Pruebas Unitarias con Vue Test Utils
- Pruebas de Extremo a Extremo con Cypress
- Simulación de Dependencias
Módulo 9: Conceptos Avanzados de Vue.js
- Funciones de Renderizado y JSX
- Renderizado del Lado del Servidor (SSR) con Nuxt.js
- API de Composición de Vue 3
- Optimización del Rendimiento
Módulo 10: Construcción y Despliegue de Aplicaciones Vue.js
- Construcción para Producción
- Despliegue de Aplicaciones Vue.js
- Integración y Despliegue Continuos (CI/CD)