Alpine.js 第四阶段学习笔记(组件化与复用)
基于:
- Alpine.js
🧠 第四阶段核心
组件化 + 逻辑复用👉 从“写页面”升级为“写组件”
1️⃣ Alpine.data()(组件定义)
👉 作用
将一段逻辑封装为可复用组件
✅ 完整示例
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<script src="https://unpkg.com/alpinejs" defer></script>
</head>
<body>
<script>
document.addEventListener('alpine:init', () => {
Alpine.data('counter', () => ({
count: 0,
inc() {
this.count++
}
}))
})
</script>
<div x-data="counter">
<button @click="inc()">+1</button>
<span x-text="count"></span>
</div>
<div x-data="counter">
<button @click="inc()">+1</button>
<span x-text="count"></span>
</div>
</body>
</html>💡 特点
- 每个组件实例独立
- 数据互不影响
- 可重复使用
2️⃣ 组件参数(可配置组件)
👉 作用
像函数一样给组件传参数
✅ 示例
<script>
document.addEventListener('alpine:init', () => {
Alpine.data('counter', (init = 0) => ({
count: init,
inc() {
this.count++
}
}))
})
</script>
<div x-data="counter(5)">
<button @click="inc()">+1</button>
<span x-text="count"></span>
</div>💡 理解
counter(5)3️⃣ 逻辑拆分(函数封装)
👉 作用
避免 HTML 中逻辑过多
✅ 示例
<script>
function userForm() {
return {
name: '',
submit() {
alert("提交:" + this.name)
}
}
}
</script>
<div x-data="userForm()">
<input x-model="name">
<button @click="submit()">提交</button>
</div>💡 优势
- 逻辑清晰
- 易维护
- 易扩展
4️⃣ 多组件独立
👉 作用
页面多个模块互不干扰
✅ 示例
<div x-data="{ msg: '组件A' }">
<span x-text="msg"></span>
</div>
<div x-data="{ msg: '组件B' }">
<span x-text="msg"></span>
</div>💡 特点
- 每个组件独立作用域
- 不会污染其他组件
5️⃣ 全局状态(Alpine.store)
👉 作用
多个组件共享数据
✅ 示例
<script>
document.addEventListener('alpine:init', () => {
Alpine.store('user', {
name: '张三'
})
})
</script>
<div>
<span x-text="$store.user.name"></span>
</div>
<div>
<input x-model="$store.user.name">
</div>💡 类似
- Vuex / Pinia(但更轻量)
💀 第四阶段核心总结
Alpine.data() → 定义组件
参数传递 → 提高复用
函数封装 → 拆逻辑
多组件 → 页面结构
store → 全局状态🔥 能力提升
| 阶段 | 能力 |
|---|---|
| 第一阶段 | 数据绑定 |
| 第二阶段 | 控制DOM |
| 第三阶段 | 响应式逻辑 |
| 第四阶段 | 组件复用 |
🧠 本质变化
之前:写页面
现在:写组件🚀 实战建议
练习一个小项目:
👉 用户管理页面
- 输入用户名(x-model)
- 点击添加(x-on)
- 列表展示(x-for)
- 删除数据(事件处理)
👉 用 Alpine.data 封装
📌 学习建议
- 少看文档,多写代码
- 每个组件自己改一遍
- 尝试复用组件
👉 不动手 = 学不会
评论 (0)