Vue.js for Beginners – Building Your First Component
March 15, 2017
Vue gained major attention in 2017 for its balance of simplicity and power.
This guide walks through building a tiny to‑do list using Vue 2.
Why Vue feels approachable
- Script tag drops you straight into coding; no build needed.
- HTML‑based templates with
{{ }}
interpolation feel natural. - Reactive data binding updates the DOM automatically.
- Component API is small—just
data
,methods
, and lifecycle hooks. - File size is light compared with other frameworks of the time.
Set up
<script src="https://cdn.jsdelivr.net/npm/vue@2.2.6/dist/vue.js"></script>
<div id="app">
<h1>My Todos</h1>
<form v-on:submit.prevent="add">
<input v-model="newTodo" placeholder="Add item" />
<button>Add</button>
</form>
<ul>
<li v-for="(todo, i) in todos" :key="i">
{{ todo.text }}
<button v-on:click="remove(i)">×</button>
</li>
</ul>
</div>
<script>
new Vue({
el: '#app',
data: {
newTodo: '',
todos: []
},
methods: {
add() {
if (this.newTodo.trim()) {
this.todos.push({ text: this.newTodo.trim() });
this.newTodo = '';
}
},
remove(index) {
this.todos.splice(index, 1);
}
}
});
</script>
Key parts
v-model
binds the input value tonewTodo
.v-on:submit.prevent
intercepts the form submit.v-for
renders list items reactively.- Direct DOM updates are not needed; Vue tracks changes.
Extending with components
<script>
Vue.component('todo-item', {
props: ['todo', 'index'],
template: `
<li>
{{ todo.text }}
<button @click="$emit('remove', index)">×</button>
</li>
`
});
</script>
Replace the <li>
in the previous template with:
<todo-item
v-for="(todo, i) in todos"
:key="i"
:todo="todo"
:index="i"
@remove="remove"
/>
Components help split the UI into reusable pieces while keeping state in the parent.
Reactivity behind the scenes
Vue converts each property in data
to a getter and setter.
When you read this.todos
, Vue records the dependency; when you push or splice, it triggers an update.
Next steps
- Persist todos with
localStorage
in thecreated
hook. - Move to Single‑File Components with
.vue
files and a build tool. - Explore Vuex for larger apps requiring shared state.
Vue’s gentle learning curve and clear data flow make it a strong first framework for newcomers, while still scaling up with components, CLI tooling, and ecosystem add‑ons.
Recent posts
- At-Least-Once vs. Exactly-Once - Understanding Message Delivery Guarantees
June 12, 2025
Learn about message delivery guarantees in distributed systems. Understand why most production systems implement at-least-once delivery with idempotency rather than attempting exactly-once delivery.
- How Idempotency Saves Your API from Chaos
June 11, 2025
Learn how to implement idempotency in your APIs to prevent duplicate actions and ensure data consistency. Includes practical examples with Supabase and Node.js.
- Vibe Coding ‑ Notes from the First Try
June 6, 2025
Quick lessons from spinning up a new blog with an AI pair‑programmer and Cursor.