nextjs 实现TodoList网页应用案例
创始人
2024-11-05 02:03:40

参考:
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].completed     setTodos(newTodos)   }    const deleteTodo = (index) => {     const newTodos = todos.filter((_, i) => i !== index)     setTodos(newTodos)   }    return (     

TodoList

addTodo} /> todos} toggleTodo={toggleTodo} deleteTodo={deleteTodo} />
) }

pages目录下创建_app.js

import '../styles/globals.css'  function MyApp({ Component, pageProps }) {   return ...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) return       addTodo(value)       setValue('')     }        return (       
handleSubmit} className="todo-form"> value} onChange={(e) => setValue(e.target.value)} placeholder="Add a todo" />
) }

在components目录下创建TodoList.js:

export default function TodoList({ todos, toggleTodo, deleteTodo }) {     return (       
    {todos.map((todo, index) => (
  • () => toggleTodo(index)} /> {todo.text}
  • ))}
) }

在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 

相关内容

热门资讯

裸辞做“一人公司”,我后悔了 去年这个时候,一位以色列程序员正在东南亚旅行。他顺手把一个在脑子里转了很久的想法做成了产品,一个让任...
南京建成国内首个Pre-6G试... 4月21日,2026全球6G技术与产业生态大会在南京开幕。全息互动技术展台前,一名远在北京的工作人员...
超梵求职受邀参加“2025抖音... 超梵求职受邀参加“2025抖音巨量引擎成人教育行业生态大会”,探讨分享优质内容传播,服务万千学员。 ...
摩托罗拉Razr 2026(R... IT之家 4 月 22 日消息,摩托罗拉宣布新一代 Razr 折叠手机将于 4 月 29 日在美国发...
库克卸任,特纳斯领航:苹果新纪... 苹果首席执行官蒂姆·库克将卸任,硬件工程主管约翰·特纳斯将接任,苹果公司今天宣布此事。 库克将在夏季...