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

nextjs 实现TodoList网页应用案例

参考:
https://nextjs.org/

Next.js 是用于网络的一种 React 框架。一些世界上最大的公司在使用它,它能够借助 React 组件的力量让您创建高质量的网络应用程序。

1、创建项目:

另外注意:pages与app路由存在冲突,如果有app文件夹删除,比如这里创建的就用src下面app文件夹,整体删除,不然构建项目会报错

npx create-next-app@latest todolist
cd todolist

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

2、创建组件、页面
在这里插入图片描述

pages目录下创建index.js

import { useState, useEffect } from 'react'
import TodoForm from '../components/TodoForm'
import TodoList from '../components/TodoList'export default function Home() {const [todos, setTodos] = useState([])useEffect(() => {const storedTodos = JSON.parse(localStorage.getItem('todos') || '[]')setTodos(storedTodos)}, [])useEffect(() => {localStorage.setItem('todos', JSON.stringify(todos))}, [todos])const addTodo = (text) => {setTodos([{ text, completed: false }, ...todos])}const toggleTodo = (index) => {const newTodos = [...todos]newTodos[index].completed = !newTodos[index].completedsetTodos(newTodos)}const deleteTodo = (index) => {const newTodos = todos.filter((_, i) => i !== index)setTodos(newTodos)}return (<div className="container"><h1>TodoList</h1><TodoForm addTodo={addTodo} /><TodoList todos={todos} toggleTodo={toggleTodo} deleteTodo={deleteTodo} /></div>)
}

pages目录下创建_app.js

import '../styles/globals.css'function MyApp({ Component, pageProps }) {return <Component {...pageProps} />
}export default MyApp

在components目录下创建TodoForm.js

import { useState } from 'react'export default function TodoForm({ addTodo }) {const [value, setValue] = useState('')const handleSubmit = (e) => {e.preventDefault()if (!value) returnaddTodo(value)setValue('')}return (<form onSubmit={handleSubmit} className="todo-form"><inputtype="text"value={value}onChange={(e) => setValue(e.target.value)}placeholder="Add a todo"/><button type="submit">Add</button></form>)}

在components目录下创建TodoList.js:

export default function TodoList({ todos, toggleTodo, deleteTodo }) {return (<ul className="todo-list">{todos.map((todo, index) => (<li key={index} className={`todo-item ${todo.completed ? 'completed' : ''}`}><inputtype="checkbox"checked={todo.completed}onChange={() => toggleTodo(index)}/><span>{todo.text}</span><button onClick={() => deleteTodo(index)}>Delete</button></li>))}</ul>)}

在styles目录下的globals.css中添加样式

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-form input {flex-grow: 1;padding: 10px;font-size: 16px;border: 1px solid #ddd;border-radius: 4px 0 0 4px;
}.todo-form 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;
}.todo-item button {margin-left: auto;background-color: #f44336;color: white;border: none;padding: 5px 10px;border-radius: 4px;cursor: pointer;
}

2、运行

测试

npm run dev

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

构建部署

npm run build

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 分布式存储ceph知识点整理
  • Flink单机和集群环境部署教程
  • opencv 三维重建基础
  • PDF转Markdown的利器(MinerU版)
  • jupyter项目使用Anaconda环境内核
  • 算法---动态规划专练(1)
  • Spring boot tomcat使用自定义线程池监控线程数量告警
  • 云手机在海外社交媒体运营中的作用
  • 【视觉SLAM】 十四讲ch7习题
  • 使用Docker Compose进行容器编排的最佳实践
  • 产业园物业满意度调研指标设计
  • c++中的标准库
  • C++标准模板(STL)- 类型支持 (类型属性,检查类型是否拥有强结构相等性,std::has_strong_structural_equality)
  • 清除 Nuxt 状态缓存:clearNuxtState
  • SQL进阶
  • 3.7、@ResponseBody 和 @RestController
  • CSS选择器——伪元素选择器之处理父元素高度及外边距溢出
  • C语言笔记(第一章:C语言编程)
  • gitlab-ci配置详解(一)
  • HTML5新特性总结
  • iOS小技巧之UIImagePickerController实现头像选择
  • MD5加密原理解析及OC版原理实现
  • Netty 4.1 源代码学习:线程模型
  • spring cloud gateway 源码解析(4)跨域问题处理
  • spring security oauth2 password授权模式
  • Synchronized 关键字使用、底层原理、JDK1.6 之后的底层优化以及 和ReenTrantLock 的对比...
  • Web标准制定过程
  • 百度贴吧爬虫node+vue baidu_tieba_crawler
  • 机器学习中为什么要做归一化normalization
  • 配置 PM2 实现代码自动发布
  • 适配iPhoneX、iPhoneXs、iPhoneXs Max、iPhoneXr 屏幕尺寸及安全区域
  •  一套莫尔斯电报听写、翻译系统
  • 正则学习笔记
  • 中国人寿如何基于容器搭建金融PaaS云平台
  • $.ajax中的eval及dataType
  • (1)Android开发优化---------UI优化
  • (C++哈希表01)
  • (NSDate) 时间 (time )比较
  • (vue)页面文件上传获取:action地址
  • (zt)基于Facebook和Flash平台的应用架构解析
  • (超详细)语音信号处理之特征提取
  • (二)什么是Vite——Vite 和 Webpack 区别(冷启动)
  • (二十一)devops持续集成开发——使用jenkins的Docker Pipeline插件完成docker项目的pipeline流水线发布
  • (翻译)Entity Framework技巧系列之七 - Tip 26 – 28
  • (力扣)循环队列的实现与详解(C语言)
  • (十六)串口UART
  • (小白学Java)Java简介和基本配置
  • (转)Android学习系列(31)--App自动化之使用Ant编译项目多渠道打包
  • (转)Unity3DUnity3D在android下调试
  • (最完美)小米手机6X的Usb调试模式在哪里打开的流程
  • ***php进行支付宝开发中return_url和notify_url的区别分析
  • .Net Core中Quartz的使用方法
  • .net 提取注释生成API文档 帮助文档
  • .NET:自动将请求参数绑定到ASPX、ASHX和MVC(菜鸟必看)
  • .Net7 环境安装配置