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

千峰React:案例一

做这个案例捏

因为需要用到样式,所以创建一个样式文件:

//29_实战.module.css
.active{text-decoration:line-through
}

然后创建jsx文件,修改main文件:导入Todos,写入Todos组件

import { StrictMode } from 'react'
import { createRoot } from 'react-dom/client'
import Todos from './28_实战'createRoot(document.getElementById('root')).render(<StrictMode><Todos /></StrictMode>
)

Todos.jsx文件需要先写渲染组件的基本结构:

function Todos() {return (<div></div>)
}
export default Todos

观察案例,首先需要一个添加任务的文本框、点击添加任务的按钮、用value使用可控组件改变value值,记得加onChange:

return (<div><input type='text' value={msg} onChange={handleChange} /><button onClick={handleClick}>点击添加任务</button></div>)

改变value的值、使用Immer整合更改

 const [msg, setMsg] = useState('')const [list, setList] = useImmer([])const handleChange = (e) => {setMsg(e.target.value)}const handleClick = () => {setList((draft) => {draft.unshift({ id: list.length, task: msg, checked: false })})setMsg('')}

复选框功能:

 const unCompleteList = list.filter((item) => !item.checked)const completeList = list.filter((item) => item.checked)const handleChecked = (e, id) => {setList((draft) => {draft.find((item) => item.id === id).checked = e.target.checked //更改对应id的数据的复选框状态})}return(<div>{/* {未完成的列表} */}<CompleteListtitle={<h2>未完成的任务:{unCompleteList.length}个</h2>}handleChecked={handleChecked}list={unCompleteList}/>{/* {已完成的列表} */}<CompleteListtitle={<h2>已完成的任务:{completeList.length}个</h2>}list={completeList}handleChecked={handleChecked}/></div>)

列表的组件

function CompleteList({title = '',list = [],handleChecked = function () {},
}) {return (<>{title}<ul>{list.map((item) => {return (<likey={item.id}className={classNames({ [style.active]: item.checked })}><inputtype='checkbox'checked={item.checked}onChange={(e) => handleChecked(e, item.id)}/>{item.task}</li>)})}</ul></>)
}

整体的代码

import { func } from 'prop-types'
import { useState } from 'react'
import { useImmer } from 'use-immer'
import classNames from 'classnames'
import style from './29_实战.module.css'function CompleteList({title = '',list = [],handleChecked = function () {},
}) {return (<>{title}<ul>{list.map((item) => {return (<likey={item.id}className={classNames({ [style.active]: item.checked })}><inputtype='checkbox'checked={item.checked}onChange={(e) => handleChecked(e, item.id)}/>{item.task}</li>)})}</ul></>)
}function Todos() {const [msg, setMsg] = useState('')const [list, setList] = useImmer([])const unCompleteList = list.filter((item) => !item.checked)const completeList = list.filter((item) => item.checked)const handleChange = (e) => {setMsg(e.target.value)}const handleClick = () => {setList((draft) => {draft.unshift({ id: list.length, task: msg, checked: false })})setMsg('')}const handleChecked = (e, id) => {setList((draft) => {draft.find((item) => item.id === id).checked = e.target.checked //更改对应id的数据的复选框状态})}return (<div><input type='text' value={msg} onChange={handleChange} /><button onClick={handleClick}>点击添加任务</button>{/* {未完成的列表} */}<CompleteListtitle={<h2>未完成的任务:{unCompleteList.length}个</h2>}handleChecked={handleChecked}list={unCompleteList}/>{/* {已完成的列表} */}<CompleteListtitle={<h2>已完成的任务:{completeList.length}个</h2>}list={completeList}handleChecked={handleChecked}/></div>)
}
export default Todos

效果:

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

相关文章:

  • 部署Joplin私有云服务器postgres版-docker compose
  • rust学习笔记6-数组练习704. 二分查找
  • Jsmoke-一款强大的js检测工具,浏览器部署即用,使用方便且高效
  • PyCharm中通过命令行执行`pip`命令下载到哪里了:虚拟环境目录下
  • Spring Boot操作MaxComputer(保姆级教程)
  • Spring的构造注入
  • 服务器IPMI用户名、密码批量检查
  • 管理后台环境配置
  • element-ui infiniteScroll 组件源码分享
  • Pany-v2:LFI漏洞探测与敏感文件(私钥窃取/其他)自动探测工具
  • 供应链管理系统--升鲜宝门店收银系统功能解析,登录、主界面、会员 UI 设计图(一)
  • Day11,Hot100(贪心算法)
  • nss刷题4
  • Eclipse 编译项目指南
  • 天佐.乾坤袋 基于抽屉式文件存储的NoSql数据库
  • win11编译pytorch cuda128版本流程
  • Windows 11 下正确安装 Docker Desktop 到 D 盘的完整教程
  • IDEA - 查看类的继承结构(通过快捷键查看、通过生成类图查看)
  • Vue 3指令全解析:内置指令与自定义指令实战指南
  • Springboot 自动化装配的原理
  • Linux——进程池
  • Qt基于等待条件QWaitCondition实现的任务队列模型示例
  • 微服务即时通信系统---(六)语音识别子服务
  • JavaWeb基础专项复习5——请求对象和响应对象request and response
  • mac下载MAMP6.8.1;解决mac使用小皮面板安装php7.4
  • 大模型WebUI:Gradio全解12——LangChain原理、架构和组件(3)
  • redis --- 相关基础知识整理
  • 如何用 Python 进行机器学习
  • 《Effective Objective-C》阅读笔记(下)
  • 解释Promise的工作原理及其状态