[react] 使用react写一个todo应用,说说你的思路

[react] 使用react写一个todo应用,说说你的思路

  1. 拆分组件:应用 + 表单部分(input + button)、列表部分(checkbox + ul>li + delete button)
  2. 数据设计:表单的待输入字段 + 列表中的List数据(List item中有content isCompleted)
  3. 数据存放:所有的数据都存放到“应用”组件,事件和子数据都通过props往下传递
    下面是简单的实现
import React, { useState, useRef } from 'react';function useTodoList(initialList) {const id = useRef(0);const [list, setList] = useState(initialList);// 增加Todoconst add = text => {id.current++;setList(list.concat({id: id.current,text,isCompleted: false}));};// 删除Todoconst del = id => {setList(list.filter(e => {return e.id !== id;}));};// 设置已完成const toggleStatus = id => {setList(list.map(e => {if (e.id === id) {return {...e,isCompleted: !e.isCompleted};} else {return { ...e };}}));};return [list,{add,del,toggleStatus}];
}const Form = ({ onAdd }) => {const [value, setValue] = useState('');const onChange = event => {const value = event.target.value;setValue(value);};const onSubmit = () => {onAdd(value);setValue('');};return (<React.Fragment><input value={value} onChange={onChange} /><button onClick={onSubmit}>提交</button></React.Fragment>);
};const TodoList = ({ list, onChange, onDel }) => {const setItemStyle = isCompleted => {return isCompleted ? { 'text-decoration': 'line-through' } : {};};return (<ul>{list.map(e => {return (<li key={e.id} style={setItemStyle(e.isCompleted)}><inputtype="checkbox"checked={e.isCompleted}onChange={() => onChange(e.id)}/><span>{e.text}</span><button onClick={() => onDel(e.id)}>删除</button></li>);})}</ul>);
};export default function App() {const [todoList, { add, del, toggleStatus }] = useTodoList([{ text: 'text', id: 123, isCompleted: false }]);return (<div><Form onAdd={add} /><TodoList list={todoList} onChange={toggleStatus} onDel={del} /></div>);
}

个人简介

我是歌谣,欢迎和大家一起交流前后端知识。放弃很容易,
但坚持一定很酷。欢迎大家一起讨论











主目录

与歌谣一起通关前端面试题

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/404614.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

第一次写博客

学习关于前端的知识也有些时间了&#xff0c;从一点不懂到现在的了解到很多关于前端各方面的知识&#xff0c;也算是收获了许多吧&#xff0c;学习了HTML,CSS,JavaScript,PHP,ajax,jQuery,等等许多东西&#xff0c;还有一些框架结构和关于函数的封装&#xff0c;可是关于所学的…

shell除去重复的行——uniq命令

From: http://blog.163.com/redhumor126/blog/static/1955478420123119218332/ 进行排序之后&#xff0c;您会发现有些行是重复的。有时候该重复信息是不需要的&#xff0c;可以将它除去以节省磁盘空间。不必对文本行进行排序&#xff0c;但是您应当记住 uniq 在读取行时会对…

Qt6.2.1使用clang格式化代码

1、环境说明 Qt6.2.1 64bit, windows环境, 安装链接&#xff1a;Download Qt | Develop Desktop & Embedded Systems | Qt llvm 10.0.0 64bit windows环境&#xff0c;安装链接&#xff1a; LLVM Download Page 2、启用Beautifer 帮助--关于插件&#xff0c;勾选Beautif…

为何加入了AddType就无法启动Apache

AddType application/x-compress .Z AddType application/x-gzip .gz .tgz AddType application/x-httpd-php.php 如上面第3句加入了就无法启动apache。这是为什么&#xff1f; 其实我一直都没有错误。后来在网络上找了下&#xff0c;原来addtype这种值只有通过拷贝&#xff0c…

[react] 请说说你对react的render方法的理解

[react] 请说说你对react的render方法的理解 render是class组件中必须被重载的方法&#xff0c;组件执行render方法的条件如下&#xff1a; 初始渲染this.setState方法&#xff0c;参数不能为null,及时this.setState({}),或者setState一个相同的值&#xff0c;也会导致render…

Getting Started With Hazelcast 读书笔记(第七章)

第七章 部署策略 Hazelcast具有适应性,能根据不同的架构和应用进行特定的部署配置,每个应用可以根据具体情况选择最优的配置: 数据与应用紧密结合的模式(重点,of就是这种) 胖客户端模式(最好用一种) 轻成员节点模式(折衷上面两种) 1.使用紧密结合的模式&#xff0c;每个JVM实例…

shell 删除文本中的重复行(sort+uniq/awk/sed) (方法=效率啊)

From: http://churuimin425.blog.163.com/blog/static/341298772012230112956712/ 删除文本中的重复行(sortuniq/awk/sed)三种常见方法:第一&#xff0c;用sortuniq&#xff0c;注意&#xff0c;单纯uniq是不行的。shell> sort -k2n file | uniq > a.out 这里我做了个…

Qt 调用Python引擎混合编程

0、前言 使用Qt和Python做混合编程&#xff0c;充分发挥Qt GUI的图形化框架优势和Python数据处理的计算能力。复杂的计算可用到Python众多三方库&#xff0c;将Python需要执行的功能写成py文件&#xff0c;做成插件的形式&#xff0c;被Qt c调用&#xff0c;修改py文件即可实现…

高扫后督解决方案 力助银行内部核查

网络时代&#xff0c;传统扫描仪需求萎缩&#xff0c;但作为扫描仪家族中重要成员&#xff0c;高速扫描仪却正经历逆势繁荣&#xff1a;因随以金融、教育、政府为代表的行业信息化建设力度不断加强&#xff0c;海量文档快速扫描及数字化存储管理需求飞涨&#xff0c;而满足这类…

[react] 在react中遍历的方法有哪些?它们有什么区别呢?

[react] 在react中遍历的方法有哪些&#xff1f;它们有什么区别呢&#xff1f; 有React.Children.map和 React.Children.forEach这两个方法&#xff0c;他们的参数都是在组件中接受props.children这个ReactNode作为参数&#xff0c;然后进行遍历。专门提供这两个遍历方法的目的…

C# 特性 Attribute

特性就是在类的类名称、属性、方法等上面加一个标记&#xff0c;使这些类、属性、方法等具有某些统一的特征&#xff0c;从而达到某些特殊的需要。举个小栗子&#xff1a;方法的异常捕捉&#xff0c;你是否还在某些可能出现异常的地方&#xff08;例如数据库的操作、文件的操作…

setsockopt , getsoctopt 函数的Level 参数和 name 参数对应表!!!

From: http://blog.csdn.net/jasonm2008/article/details/4016292 int setsockopt( SOCKET s, int level, int optname, const char* optval, int optlen ); 对于这个函数的level级别的参数到底有哪些&#xff0c; optname &#xff0c;对应的又有哪些&#xff0c;一…

Qt 调用MATLAB引擎混合编程

0、前言 C/C调用MATLAB有三个方式&#xff1a;调用dll文件、调用exe可执行程序和调用Engin引擎。 第一种方式利用MATLAB Coder 将MATLAB代码生成C/C代码和相关动态链接库&#xff0c;可以在没有MATLAB的电脑和设备上运行。 第二种方式利用MATLAB将MATLAB代码编译成exe可执行…

caja 原理 : 前端

作为前端开放的基础安全保证&#xff0c;caja 是目前比较合适的运行机制&#xff0c;包括前端运行环境以及后端编译环境&#xff0c;这次先整体介绍下 caja 在前端是如何屏蔽外部模块代码对整体应用的影响 &#xff08;注意&#xff1a;官方文档较少&#xff0c;以下为自己理解…

[react] 请说说什么是useImperativeHandle?

[react] 请说说什么是useImperativeHandle&#xff1f; // useImperativeHandle 可以让你在使用 ref 时自定义暴露给父组件的实例值。 // useImperativeHandle 应当与 forwardRef 一起使用&#xff1a;import React, { useImperativeHandle, forwardRef } from react import {…

xcode3.2.6升级至4.0.2经验加教训总结(转)

首先&#xff0c;完美运行都项目直接在Xcode4.0.2中build可能会出现这样一个错误&#xff08;人品好的自觉绕道&#xff09;&#xff1a;[BEROR]No architectures to compile for (ARCHSi386, VALID_ARCHS). 首先第一反应是打开工程的Build Settings&#xff0c;最基本的检测&a…

扩展欧几里德问题

我们先来看这个问题 求最大公约数的gcd(m,n)方法也可以如下定义&#xff1a; 如果m%n为0&#xff0c;那么gcd(m,n)的值为n. 否则&#xff0c;gcd(m,n)就是gcd(n,m%n) 编写一个递归的方法来求最大公约数。编写一个测试程序&#xff0c;计算gcd(24,16)和gcd(255,5) 我们先引入欧几…

步步为营:Asp.Net序列化Json格式的两种方法

过去我们使用JSON.net序列化一个对象&#xff0c;在asp.net3.5中已经集成了序列化对象为json的方法。 我们分别针对System.Runtime.Serialization.Json和System.Web.Script.Serialization两个命名空间下的不同方法进行序列化和反序列化。 System.Runtime.Serialization.Json (在…

[react] react中setState的第二个参数作用是什么呢?

[react] react中setState的第二个参数作用是什么呢&#xff1f; 第二个参数是一个callback函数&#xff0c;用于setState设置state的属性值成功之后的回调&#xff0c;此时调用this.state.property可以取到刚刚设置的最新的值 个人简介 我是歌谣&#xff0c;欢迎和大家一起…

Qt 调用VISA库通过SCPI程控仪器-以IT8906A电子负载为例

SCPI是一种可编程仪器的标准命令&#xff0c;可通过 GPIB&#xff0c; RS232&#xff0c; USB&#xff0c; LAN接口等控制仪器功能的编程语言。 SCPI 置于 IEEE 488.2 硬件部分的顶层。相同 SCPI 命令和参数控制着不同机器的相同功能。一般标准仪器都支持SCPI协议&#xff0c;如…