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

vue、react前端框架实现TodoList页面案例

原始TodoList网页(主要就是链接里网页应用ndex.html、styles.css、script.js ):
https://blog.csdn.net/weixin_42357472/article/details/140657576
node、npn安装参考:
https://blog.csdn.net/weixin_42357472/article/details/140643624

vue、react区别
Vue:Vue 有自己的脚手架工具 Vue CLI,可以快速创建项目。Vue 还有自己的服务器渲染框架 Nuxt.js。
React:React 有自己的脚手架工具 Create React App,可以快速创建项目。React 还有自己的服务器渲染框架 Next.js。
在这里插入图片描述

1、vue框架实现TodoList页面案例

安装vue:

npm install -g @vue/cli
或
npm install -g cnpm --registry=https://registry.npm.taobao.org

在这里插入图片描述
创建应用:

vue create my-vue-project

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

进入项目写应用:

cd my-vue-project#修改以下文件:
src/App.vue

src/App.vue代码

<template><div id="app"><h1>TodoList</h1><form @submit.prevent="addTodo"><input v-model="newTodo" placeholder="Add a new todo"><button type="submit">Add</button></form><ul><li v-for="(todo, index) in todos" :key="index" :class="{ completed: todo.completed }"><input type="checkbox" v-model="todo.completed" @change="saveTodos"><span>{{ todo.text }}</span><button @click="deleteTodo(index)">Delete</button></li></ul></div>
</template><script>
export default {name: 'App',data() {return {newTodo: '',todos: []}},methods: {loadTodos() {const savedTodos = localStorage.getItem('todos')if (savedTodos) {this.todos = JSON.parse(savedTodos)}},saveTodos() {localStorage.setItem('todos', JSON.stringify(this.todos))},addTodo() {if (this.newTodo.trim() === '') returnthis.todos.unshift({ text: this.newTodo, completed: false })this.newTodo = ''this.saveTodos()},deleteTodo(index) {this.todos.splice(index, 1)this.saveTodos()}},mounted() {this.loadTodos()}
}
</script><style>
#app {font-family: Arial, sans-serif;max-width: 500px;margin: 0 auto;padding: 20px;
}
h1 {text-align: center;
}
form {display: flex;margin-bottom: 20px;
}
input[type="text"] {flex-grow: 1;padding: 10px;font-size: 16px;border: 1px solid #ddd;border-radius: 4px 0 0 4px;
}
button {padding: 10px 20px;font-size: 16px;background-color: #4CAF50;color: white;border: none;border-radius: 0 4px 4px 0;cursor: pointer;
}
ul {list-style-type: none;padding: 0;
}
li {display: flex;align-items: center;padding: 10px;background-color: #f9f9f9;border: 1px solid #ddd;margin-bottom: 10px;border-radius: 4px;
}
li.completed {text-decoration: line-through;opacity: 0.6;
}
li input[type="checkbox"] {margin-right: 10px;
}
li button {margin-left: auto;background-color: #f44336;
}
</style>

在这里插入图片描述

运行项目:

npm run serve

在这里插入图片描述
打开网页
在这里插入图片描述

1、react框架实现TodoList页面案例

安装好node自带了npx

创建应用:

npx create-react-app react-todolist
或
##安装create-react-app
cnpm install -g create-react-app
##创建应用
create-react-app react-todolist

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

进入项目写应用:

cd react-todolist#修改以下文件:
src/App.js
src/App.css

src/App.js 代码

import React, { useState, useEffect } from 'react';
import './App.css';function App() {const [todos, setTodos] = useState([]);const [newTodo, setNewTodo] = useState('');useEffect(() => {loadTodos();}, []);const loadTodos = () => {const savedTodos = localStorage.getItem('todos');if (savedTodos) {setTodos(JSON.parse(savedTodos));}};const saveTodos = (updatedTodos) => {localStorage.setItem('todos', JSON.stringify(updatedTodos));};const addTodo = (e) => {e.preventDefault();if (newTodo.trim() === '') return;const updatedTodos = [{ text: newTodo, completed: false }, ...todos];setTodos(updatedTodos);setNewTodo('');saveTodos(updatedTodos);};const toggleTodo = (index) => {const updatedTodos = todos.map((todo, i) => i === index ? { ...todo, completed: !todo.completed } : todo);setTodos(updatedTodos);saveTodos(updatedTodos);};const deleteTodo = (index) => {const updatedTodos = todos.filter((_, i) => i !== index);setTodos(updatedTodos);saveTodos(updatedTodos);};return (<div className="App"><h1>TodoList</h1><form onSubmit={addTodo}><input type="text" value={newTodo} onChange={(e) => setNewTodo(e.target.value)}placeholder="Add a new todo"/><button type="submit">Add</button></form><ul>{todos.map((todo, index) => (<li key={index} className={todo.completed ? 'completed' : ''}><input type="checkbox" checked={todo.completed}onChange={() => toggleTodo(index)}/><span>{todo.text}</span><button onClick={() => deleteTodo(index)}>Delete</button></li>))}</ul></div>);
}export default App;

src/App.css代码

.App {font-family: Arial, sans-serif;max-width: 500px;margin: 0 auto;padding: 20px;
}h1 {text-align: center;
}form {display: flex;margin-bottom: 20px;
}input[type="text"] {flex-grow: 1;padding: 10px;font-size: 16px;border: 1px solid #ddd;border-radius: 4px 0 0 4px;
}button {padding: 10px 20px;font-size: 16px;background-color: #4CAF50;color: white;border: none;border-radius: 0 4px 4px 0;cursor: pointer;
}ul {list-style-type: none;padding: 0;
}li {display: flex;align-items: center;padding: 10px;background-color: #f9f9f9;border: 1px solid #ddd;margin-bottom: 10px;border-radius: 4px;
}li.completed {text-decoration: line-through;opacity: 0.6;
}li input[type="checkbox"] {margin-right: 10px;
}li button {margin-left: auto;background-color: #f44336;
}

在这里插入图片描述
运行项目:

npm start

在这里插入图片描述
网页查看:
在这里插入图片描述

相关文章:

vue、react前端框架实现TodoList页面案例

原始TodoList网页&#xff08;主要就是链接里网页应用ndex.html、styles.css、script.js &#xff09;&#xff1a; https://blog.csdn.net/weixin_42357472/article/details/140657576 node、npn安装参考&#xff1a; https://blog.csdn.net/weixin_42357472/article/details/…...

el-date-picker 时间控件校验选择时间必须早于当前时间(带时分秒)

el-date-picker 时间控件校验选择时间必须遭早于当前时间&#xff08;带时分秒&#xff09;&#xff0c;然后监控时间控件&#xff0c;当时间改变的时候&#xff0c;如果不是当天&#xff0c;那时间可以选择全天也就是00-24时&#xff0c;如果是当天&#xff0c;就是当前时间之…...

godot新建项目及设置外部编辑器为vscode

一、新建项目 初次打开界面如下所示&#xff0c;点击取消按钮先关闭掉默认弹出的框 点击①新建弹出中间的弹窗②中填入项目的名称 ③中设置项目的存储路径&#xff0c;点击箭头所指浏览按钮&#xff0c;会弹出如下所示窗口 根据图中所示可以选择或新建自己的游戏存储路径&…...

vue中无法调试

vue.config.js中增加 devtool configureWebpack: {name: name,resolve: {alias: {: resolve(src)}},devtool: "cheap-module-source-map" // add},然后重启即可。 顺便招聘&#xff1a;1.需要会日语。2.Java&#xff0c;JS&#xff0c;Vue&#xff0c;DB任一会者皆…...

python机器学习8--自然语言处理(2)

1&#xff0e;移除用词 在很多情况下&#xff0c;有一些文章内的英文字符、标点符号分词的结果不符合自己的预期&#xff0c;会出现一些不想要的分词&#xff0c;此时就能通过以下的函数自己设定用词&#xff0c;并且删除。 jieba.analyse.set_stop_words("stop_words.tx…...

LinkedList底层原理

节点&#xff08;Node&#xff09;结构 LinkedList 的核心是一个内部类 Node&#xff0c;每个 Node 对象代表链表中的一个元素&#xff0c;并且每个节点包含三个部分&#xff1a; 元素值 (item)&#xff1a;存储实际的数据。前驱节点引用 (prev)&#xff1a;指向当前节点前面…...

CSS技巧专栏:一日一例 11 -纯CSS实现多彩渐变按钮系列特效

CSS技巧专栏:一日一例 11 -纯CSS实现多彩渐变按钮系列特效 本篇,推荐给你几个按钮,先看一下图片 本例图片 案例分析 这是一个系列的按钮,它们具有共同的特点: 底层按钮层,具有一个彩色的渐变边框,上层是依据hover效果需要,可以是渐变,可以时白色。 鼠标hover效果…...

基于微信小程序+SpringBoot+Vue的自助点餐系统(带1w+文档)

基于微信小程序SpringBootVue的自助点餐系统(带1w文档) 基于微信小程序SpringBootVue的自助点餐系统(带1w文档) 基于微信小程序的自助点餐系统前后台分离&#xff0c;让商品订单&#xff0c;用户反馈信息&#xff0c;商品信息等相关信息集中在后台让管理员管理&#xff0c;让用…...

04-Charles中的Map Remote和Map Local介绍

Charles提供了Map Remote和Map Local两个功能。 Map Remote是将指定的网络请求重定向到另一个网址。Map Local是将指定的网络请求重定向到本地文件。 一、Map Remote 假设代码中调用了接口A&#xff0c;但是接口A的响应结果不能满足需求&#xff1b;此时&#xff0c;有另一个…...

R语言优雅的进行广义可加模型泊松回归分析

泊松回归&#xff08;Poisson regression&#xff09;是以结局变量为计数结果时的一种回归分析。泊松回归在我们的生活中应用非常广泛&#xff0c;例如&#xff1a;1分钟内过马路人数&#xff0c;1天内火车站的旅客流动数&#xff0c;1天内的银行取钱人数&#xff0c;一周内的销…...

大模型学习笔记十四:Agent模型微调

文章目录 一、大模型需要Agent技术的原因二、Prompt Engineering可以实现Agent吗&#xff1f;&#xff08;1&#xff09;ReAct原理展示和代码&#xff08;2&#xff09;ModelScope&#xff08;3&#xff09;AutoGPT&#xff08;4&#xff09;ToolLLaMA 三、既然AutoGPT可以满足…...

大疆创新2025校招内推

大疆2025校招-内推 一、我们是谁&#xff1f; 大疆研发软件团队&#xff0c;致力于把大疆的硬件设备和大疆用户紧密连接在一起&#xff0c;我们的使命是“让机器有温度&#xff0c;让数据会说话”。 在消费和手持团队&#xff0c;我们的温度来自于激发用户灵感并助力用户创作…...

搜索引擎项目(四)

SearchEngine 王宇璇/submit - 码云 - 开源中国 (gitee.com) 基于Servlet完成前后端交互 WebServlet("/searcher") public class DocSearcherServlet extends HttpServlet {private static DocSearcher docSearcher new DocSearcher();private ObjectMapper obje…...

声音克隆一键本地化部署 GPT-SoVITS

文章目录 GPT-SoVITS 介绍1:GPT-SoVITS安装2:GPT-SoVITS使用2.1 人声伴奏分离,去混响去延时工具2.2 语音切分工具2.3 语音降噪工具2.4 中文批量离线ASR工具2.5 语音文本校对标注工具GPT-SoVITS 介绍 GPT-SoVITS: 是一个由RVC变声器创始人“花儿不哭”推出的免费开源项目。…...

使用【Easypoi】实现百万数据导出

本文使用easypoi实现百万级数据导出 文章目录 前言一、一般情况下导出二、解决思路三、实现步骤导入依赖重写方法调用实现 结束 前言 下文实现了通过easypoi实现将百万级数据导出 一、一般情况下导出 一般导出流程&#xff08;简单导出&#xff09;&#xff1a; 创建对应的…...

GRL-图强化学习

GRL代码解析 一、agent.py二、drl.py三、env.py四、policy.py五、utils.py 一、agent.py 这个Python文件agent.py实现了一个强化学习&#xff08;Reinforcement Learning, RL&#xff09;的智能体&#xff0c;用于在图环境&#xff08;graph environment&#xff09;中进行学习…...

昇思25天学习打卡营第22天|Pix2Pix实现图像转换

Pix2Pix图像转换学习总结 概述 Pix2Pix是一种基于条件生成对抗网络&#xff08;cGAN&#xff09;的深度学习模型&#xff0c;旨在实现不同图像风格之间的转换&#xff0c;如从语义标签到真实图像、灰度图到彩色图、航拍图到地图等。这一模型由Phillip Isola等人在2017年提出&…...

全感知、全覆盖、全智能的智慧快消开源了。

智慧快消视频监控平台是一款功能强大且简单易用的实时算法视频监控系统。它的愿景是最底层打通各大芯片厂商相互间的壁垒&#xff0c;省去繁琐重复的适配流程&#xff0c;实现芯片、算法、应用的全流程组合&#xff0c;从而大大减少企业级应用约95%的开发成本。AI安全管理平台&…...

ABC364:D - K-th Nearest(二分)

题目 在一条数线上有 NQNQ 个点 A1,…,AN,B1,…,BQA1​,…,AN​,B1​,…,BQ​ &#xff0c;其中点 AiAi​ 的坐标为 aiai​ &#xff0c;点 BjBj​ 的坐标为 bjbj​ 。 就每个点 j1,2,…,Qj1,2,…,Q 回答下面的问题&#xff1a; 设 XX 是 A1,A2,…,ANA1​,A2​,…,AN​ 中最…...

hive中分区与分桶的区别

过去&#xff0c;在学习hive的过程中学习过分桶与分区。但是&#xff0c;却未曾将分区与分桶做详细比较。今天&#xff0c;回顾skew join时涉及到了分桶这一概念&#xff0c;一时间无法区分出分区与分桶的区别。查阅资料&#xff0c;特地记录下来。 一、Hive分区 1.分区一般是…...

FPGA边缘视觉方案解析:从芯片选型到多传感器融合实战

1. 项目概述&#xff1a;单芯片FPGA嵌入式视觉与融合分析方案 最近在梳理一些老项目的技术文档时&#xff0c;翻到了Altera&#xff08;现在已是Intel PSG的一部分&#xff09;和Eutecus在2015年左右合作推出的一套方案&#xff0c;当时在EE Times上被称作“Single-Chip FPGA-B…...

数字音频抖动抑制技术与DSS™同步方案解析

1. 数字音频系统中的抖动现象解析抖动&#xff08;Jitter&#xff09;是数字音频领域最令人头痛的问题之一&#xff0c;它就像一位不守时的乐队指挥——当每个音符的演奏时机出现微秒级的偏差时&#xff0c;整首乐曲就会失去原有的韵律和质感。在技术层面&#xff0c;抖动被定义…...

3分钟掌握SRWE:打破屏幕分辨率限制的终极窗口编辑神器

3分钟掌握SRWE&#xff1a;打破屏幕分辨率限制的终极窗口编辑神器 【免费下载链接】SRWE Simple Runtime Window Editor 项目地址: https://gitcode.com/gh_mirrors/sr/SRWE SRWE&#xff08;Simple Runtime Window Editor&#xff09;是一款革命性的实时窗口编辑器&…...

Fast-GitHub:3个技巧让国内开发者告别GitHub龟速时代

Fast-GitHub&#xff1a;3个技巧让国内开发者告别GitHub龟速时代 【免费下载链接】Fast-GitHub 国内Github下载很慢&#xff0c;用上了这个插件后&#xff0c;下载速度嗖嗖嗖的~&#xff01; 项目地址: https://gitcode.com/gh_mirrors/fa/Fast-GitHub 你是否曾经因为Gi…...

在数据爬取项目中集成 Taotoken 大模型 API 进行智能解析

&#x1f680; 告别海外账号与网络限制&#xff01;稳定直连全球优质大模型&#xff0c;限时半价接入中。 &#x1f449; 点击领取海量免费额度 在数据爬取项目中集成 Taotoken 大模型 API 进行智能解析 处理海量非结构化网页数据时&#xff0c;传统的规则提取方法往往力不从心…...

3个真实问题告诉你:DdddOcr如何成为你的免费离线验证码识别助手

3个真实问题告诉你&#xff1a;DdddOcr如何成为你的免费离线验证码识别助手 【免费下载链接】ddddocr 带带弟弟 通用验证码识别OCR pypi版 项目地址: https://gitcode.com/gh_mirrors/dd/ddddocr 当你在自动化测试、数据采集或系统集成中遇到验证码时&#xff0c;是否曾…...

零成本AI评审知识库:基于GitHub Actions与Gemini的自动化学术发布平台

1. 项目概述&#xff1a;一个零成本、AI驱动的开放知识库如果你是一名研究者、开发者&#xff0c;或者正在构建一个需要实时验证信息的AI智能体&#xff0c;那么你一定对传统学术出版的漫长周期和封闭性感到头疼。一篇论文从投稿到发表&#xff0c;动辄数月&#xff0c;评审过程…...

从Softmax到ArcFace:PyTorch实战解析人脸识别中的角度间隔损失函数

1. 从Softmax到ArcFace&#xff1a;人脸识别损失函数的进化之路 人脸识别技术如今已经深入到我们生活的方方面面&#xff0c;从手机解锁到机场安检&#xff0c;背后都离不开一个关键环节——如何让模型学会区分不同的人脸。这就像教小朋友认人一样&#xff0c;我们需要告诉模型…...

无需写代码!用 PackSoft 做数字展厅大屏

前言 做过展厅项目的朋友都懂这种痛—— 客户参观来了&#xff0c;讲解员打开浏览器&#xff0c;地址栏、书签栏、收藏夹全暴露在屏幕上&#xff0c;旁边还挂着一个没关的 QQ 弹窗……高端大气的数字展厅&#xff0c;体验瞬间拉低一个档次。 更麻烦的是&#xff1a;大屏全屏…...

【云原生问题集】容器内存监控避坑:90%工程师踩过的“free命令雷区”

你有没有遇到过这种怪事&#xff1f;压测跑得好好的&#xff0c;容器突然被 OOM Kill 了。你赶紧进容器敲了个 free -h&#xff0c;一看内存快吃满了&#xff0c;心想“资源不够&#xff0c;加&#xff01;” 加完内存&#xff0c;跑一会儿又被杀了。坑爹的是&#xff0c;你明明…...