当前位置: 首页 > news >正文

Astro 实现TodoList网页应用案例

Astro 是一个现代化的静态站点生成器和前端框架,它具有独特的设计理念:岛屿架构。它允许开发人员使用组件化的方式构建内容优先的网站,将各种技术栈(如React、Vue、Svelte等)的组件无缝集成到同一个项目中。

1、创建项目:

npm create astro@latest astro-todolist

在这里插入图片描述

cd astro-todolist
code .

在这里插入图片描述
创建组件
在 src/components/ 目录下创建 TodoList.astro

---
---<div id="todo-app"><h1>TodoList</h1><form id="todo-form"><input type="text" id="todo-input" placeholder="Add a new task"><button type="submit" id="add-button">Add</button></form><ul id="todo-list"></ul>
</div><script>const todoForm = document.getElementById('todo-form') as HTMLFormElement;const todoInput = document.getElementById('todo-input') as HTMLInputElement;const todoList = document.getElementById('todo-list') as HTMLUListElement;interface Todo {text: string;completed: boolean;}function loadTodos() {const todosJson = localStorage.getItem('todos');const todos: Todo[] = todosJson ? JSON.parse(todosJson) : [];todos.forEach(todo => {addTodoToDOM(todo.text, todo.completed);});}function saveTodos() {const todos: Todo[] = Array.from(todoList.children).map(li => ({text: li.querySelector('span')?.textContent || '',completed: li.classList.contains('completed')}));localStorage.setItem('todos', JSON.stringify(todos));}function addTodoToDOM(text: string, completed = false) {const li = document.createElement('li');li.className = 'todo-item' + (completed ? ' completed' : '');li.innerHTML = `<input type="checkbox" ${completed ? 'checked' : ''}><span>${text}</span><button class="delete-button">Delete</button>`;const checkbox = li.querySelector('input[type="checkbox"]');if (checkbox) {checkbox.addEventListener('change', function() {li.classList.toggle('completed');if (li.classList.contains('completed')) {todoList.appendChild(li);} else {todoList.insertBefore(li, todoList.firstChild);}saveTodos();});}const deleteButton = li.querySelector('.delete-button');if (deleteButton) {deleteButton.addEventListener('click', function() {li.remove();saveTodos();});}if (completed) {todoList.appendChild(li);} else {todoList.insertBefore(li, todoList.firstChild);}}todoForm.addEventListener('submit', function(e: Event) {e.preventDefault();if (todoInput.value.trim() === '') return;addTodoToDOM(todoInput.value);saveTodos();todoInput.value = '';});document.addEventListener('DOMContentLoaded', loadTodos);
</script><style>body {font-family: Arial, sans-serif;max-width: 500px;margin: 0 auto;padding: 20px;}h1 {text-align: center;}#todo-form {display: flex;margin-bottom: 20px;}#todo-input {flex-grow: 1;padding: 10px;font-size: 16px;border: 1px solid #ddd;border-radius: 4px 0 0 4px;}#add-button {padding: 10px 20px;font-size: 16px;background-color: #4CAF50;color: white;border: none;border-radius: 0 4px 4px 0;cursor: pointer;}#todo-list {list-style-type: none;padding: 0;}.todo-item {display: flex;align-items: center;padding: 10px;background-color: #f9f9f9;border: 1px solid #ddd;margin-bottom: 10px;border-radius: 4px;}.todo-item.completed {text-decoration: line-through;opacity: 0.6;}.todo-item input[type="checkbox"] {margin-right: 10px;}.delete-button {margin-left: auto;background-color: #f44336;color: white;border: none;padding: 5px 10px;border-radius: 4px;cursor: pointer;}
</style>

创建页面
在 src/pages/index.astro 中使用 TodoList 组件:

---
import TodoList from '../components/TodoList.astro';
---<html lang="en"><head><meta charset="utf-8" /><link rel="icon" type="image/svg+xml" href="/favicon.svg" /><meta name="viewport" content="width=device-width" /><meta name="generator" content={Astro.generator} /><title>Astro TodoList</title></head><body><TodoList /></body>
</html>

在这里插入图片描述

2、运行

测试

npm run dev

在这里插入图片描述
在这里插入图片描述

构建部署

npm run build
npx netlify-cli deploy --prod

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
dist下打开网页:
在这里插入图片描述
双击静态页面打开
在这里插入图片描述

http://www.lryc.cn/news/410915.html

相关文章:

  • 计算机毕业设计Hadoop+Spark旅游景点可视化 旅游景点推荐系统 景区游客满意度预测与优化 Apriori算法 景区客流量预测 旅游大数据 景点规划
  • MySQL存储
  • 手势传感器 - 从零开始认识各种传感器【第十八期】
  • 【未来餐饮】 配送设置
  • 移动式气象设备:灵活应对,精准监测的气象先锋
  • 【AI落地应用实战】DAMODEL深度学习平台部署+本地调用ChatGLM-6B解决方案
  • 英伟达开始引领下一波浪潮:物理AI
  • SQLServer设置端口
  • 诊断技巧分享 | 用WPS500压力传感器测试空调压力波形?
  • W1R3S靶机全通详细教程
  • GitHub Revert Merge Commit的现象观察和对PR的思考
  • 使用JavaFx Fxml笔记
  • 友盟U-APM——优秀的前端性能监控工具
  • 人工智能与机器学习原理精解【10】
  • TypeScript 简介
  • 什么是知识库?为什么我需要一个?
  • MySQL学习(16):视图
  • android13关机按钮 去掉长按事件 去掉启动到安全模式 删除关机长按
  • 递归求数组和
  • MySQL数据库介绍
  • 向量数据库性能测试工具(VectorDBBench.com)性价比排名
  • 2024年的AI人工智能风口是Python?一篇文章告诉你为什么!
  • 使用SpringBoot集成CAS、应用场景和示例代码
  • python爬取某财富网
  • Python 【机器学习】 进阶 之 【实战案例】房价数据中位数分析 之 [ 选择并训练模型 ] [ 模型微调 ] | 3/3(含分析过程)
  • NLP-使用Word2vec实现文本分类
  • 基于SpringBoot实现验证码功能
  • 字节测开面筋大总结!!!!
  • Mindspore框架DCGAN模型实现漫画头像生成|(二)DCGAN模型构建
  • mongo-csharp-driver:MongoDB官方的C#客户端驱动程序!