第二十三章 案例TodoList之数据更新

news2024/11/18 2:26:39

本小节,我们要实现点击复选框,修改任务项的实时状态,但是Item组件和App组件是祖孙关系,不是父子关系,我们还能使用props进行通信吗?答案是可以的。

在App组件定义一个更新的函数并传递给Item组件

  • 1、定义一个更新状态数据的函数
 // 更新状态数据
  updateTodo = () => {
    const { todos } = this.state
    console.log(todos)
  }
  • 2、先传递给List组件
 render() {
    const {todos,updateTodo} = this.props
    return (
      <ul className="todo-main">
        {
          todos.map(todo=>{
            return <Item key={todo.id} {...todo} updateTodo={updateTodo}/>
          })
        }
      </ul>
    )
  }
  • 3、在Item组件定义一个onChange事件的回调
import React, { Component } from 'react'
import "./index.css"
export default class Item extends Component {

  // 初始化状态数据
  state = {mouseIn:false}

  // 鼠标移入移出回调函数 
  mouseHandle = (flag) => {
    this.setState({mouseIn:flag})
  }

  // 更新任务项状态
  checkHandle = (id,event) => {
    this.props.updateTodo(id,event.target.checked)
  }

  render() {
    const {id,name,done} = this.props
    const {mouseIn} = this.state
    return (
      <li onMouseEnter={()=>this.mouseHandle(true)} onMouseLeave={()=>this.mouseHandle(false)}  style={{backgroundColor: mouseIn?'gainsboro':''}}>
            <label>
              <input type="checkbox" defaultChecked={done} onChange={event=>this.checkHandle(id,event)}/>
              <span>{name}</span>
            </label>
            <button className="btn btn-danger" style={{display:mouseIn?"block":"none"}}>删除</button>
      </li>
    )
  }
}

我们给复选框绑定了一个onChange的回调函数checkHandle(id,event)并把idevent作为参数。当我们点击复选框的时候,我们将参数传递给updateTodo函数,让其修改App组件的状态数据。

  • 4、改造updateTodo函数
 // 更新状态数据
  updateTodo = (id,done) => {
    const { todos } = this.state
    const newTodos = todos.map(todoObj=>{
      if (id === todoObj.id) return {...todoObj,done}
      return todoObj
    })
    this.setState({todos:newTodos})
  }

这里我们判断如果id值与列表里面的id值匹配,我们就更新done值的状态,否则不做改变,原样返回。

  • 5、具体效果

在这里插入图片描述

我们可以从图中看到,当我们点击列表的复选框,修改了任务项的状态时,react开发者工具里面的state值也会实时变化,至此,说明我们已经完成数据的实时更新。


小总结

  • 获取复选框的状态值使用:event.target.checked
  • 祖孙组件之间的通信也可以使用props进行传递。

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

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

相关文章

车载网络 - Autosar网络管理 - 网络管理报文

三、网络管理报文 NM报文的ID一般定义为&#xff1a;基础ID源地址&#xff0c;每个节点应分配一个唯一的标识符&#xff08;ECU地址&#xff09;Node_ID&#xff0c;网络管理报文一般会统一一个基地址&#xff0c;这个是根据主机厂不同而不同&#xff0c;有些是用0x400 - 0x4FF…

多通道振弦传感器无线采集仪如何外接数字传感器

多通道振弦传感器无线采集仪如何外接数字传感器 数字传感器的数据接入逻辑 VS 设备支持在 RS485 接口外接数字传感器&#xff0c; 可进行单类型、多类型数字传感器接入。 单类型数字传感器&#xff1a;使用寄存器 DS_SENSOR(282)来设置单类型数字传感器的类型和数量&#xff08…

用Flutter开发一款企业级App(开眼Flutter-OpenEye)

先贴项目地址&#xff1a;WinWang/open_eye: Flutter 开眼APP&#xff1a;整体项目架构基于Getx搭建&#xff0c;完成路由&#xff0c;依赖注入&#xff1b;网络请求框架基于RetrofitDio实现&#xff0c;配合官方JsonSerialize实现解析&#xff1b;封装项目页面多状态&#xff…

新媒体运营团队如何协同工作?

随着媒体形式的不断丰富和演变&#xff0c;社交、短视频等软件的盛行&#xff0c;新媒体运营成为近几年新兴的行业。 在新媒体团队工作过程中可能会遇到以下问题&#xff1a; 1&#xff09;热点不断更迭&#xff0c;文档资料需要快速流通&#xff1b; 2&#xff09;通过传统的…

US-DAPQ比例放大器指令接线

序号 端子名称 功能 1 CMD_P 压力阀指令 2 CMD_P- 压力阀指令- 3 CMD_Q 流量阀指令 4 CMD_Q- 流量阀指令- 5/6 N.C. 不接 7 VREF_5V 参考电压5V 8 VREF_0V 参考电压0V 9 SOL_P 压力阀线圈 10 SOL_P- 压力阀线圈 11 PWR 电源 12 PWR- 电源- 13 SOL_Q- 流量阀线圈 1…

mysql知识

1.执行步骤 2.Write-Ahead Logging 技术 这两种日志有以下三点不同。 ①redo log 是 InnoDB 引擎特有的&#xff1b;binlog 是 MySQL 的 Server 层实现的&#xff0c;所有引擎都可以使用。 ②redo log 是物理日志&#xff0c;记录的是“在某个数据页上做了什么修改”&#x…

【Linux】项目自动化构建工具 —— make/Makefile

前言&#xff1a; 在上一期的博文中&#xff0c;我们对 Linux 下的编译器 - gcc/g的使用进行了详细的讲解&#xff0c;今天我将给大家讲解的是关于 【Linux】项目自动化构建工具 —— make/Makefile 的详细使用教程&#xff01;&#xff01; 本文目录 &#xff08;一&#x…

ai智能文章生成器-ai论文写作

在数字时代&#xff0c;营销推广策略已经向数字化方向发展。今天我们要介绍的是一款名为“智能ai写作免费”的软件&#xff0c;它可以让营销人员轻松地创作新的内容&#xff0c;并且其中不需要过多的技术知识或文学背景。这款软件可以为许多企业和机构带来创造性的帮助。 智能A…

婴幼儿口水巾围兜出口美国CPC认证

婴幼儿口水巾、围兜在美国销售需要办理CPC认证&#xff0c;即儿童安全产品证书。 什么是CPC认证&#xff1f;美国亚马逊儿童玩具和儿童用品CPC认证是指颁发书面儿童产品证书&#xff08;CPC、&#xff0c;其中制造商或进口商证明其儿童产品符合所有适用的儿童产品安全规则。儿童…

被盗的ChatGPT账户在暗网热销,ChatGPT的隐私和安全问题依旧值得关注

在过去的一个月&#xff0c;Check Point研究人员在暗网上观察到了与ChatGPT相关的各种讨论和交易。暗网上最新的活动包括泄露和免费发布ChatGPT账户的凭据&#xff0c;以及交易被盗的ChatGPT账户。 根据Check Point进行的一项研究&#xff0c;从今年3月以来&#xff0c;被盗的…

QPSK调制解调FPGA实现成果展示:

目录 QPSK调制解调使用参数&#xff1a; 调制&#xff1a; 解调&#xff1a; FPGA工程架构&#xff1a; 仿真参数&#xff1a; 仿真展示&#xff1a; 调制&#xff1a; 解调&#xff1a; MATLAB星座图展示&#xff1a; QPSK调制解调使用参数&#xff1a; 采样率为4M&…

Revit插件 | 建模助手下半年规划大揭秘!

​hi&#xff0c;这里是建模助手。 在上周推送『建模助手年度版本大更新』后&#xff0c;很多盆友和我们反馈这次的升级&#xff0c;真被细节打动。 版本的兼容性更给力了&#xff0c;避免了某版本的Revit不可用的现象&#xff1b; 有求必应板块更细致了&#xff0c;新增了阶…

breakpad编译指南(Windows)

在编译breakpad时候&#xff0c;遇到各种各样的问题&#xff0c;做些记录&#xff0c;以便后续参考 Windows下已有SetUnhandledExceptionFilter可以抓取dmp&#xff0c;为什么还要研究breakpad&#xff1f;因为breakpad是跨平台的&#xff0c;相关资料参考如下&#xff1a; 02…

迅为i.MX6ULL开发板I2C总线实现driver驱动

上一章节我们写了 client.c&#xff0c;并且我们已经成功地把它加载到内核里面。i2c 用非设备树实现&#xff0c;我们需要 用 i2c_board_info 这个结构体来描述我们的 i2c 设备&#xff0c;如果我们用设备树的方法来实现&#xff0c;我们直接在设备树 的节点下面添加创建对应设…

关于File.io的学习记录(读取文本)

可以通过字节流&#xff08;FileInputStream&#xff09;、字符流&#xff08;InputStreamReader&#xff09;、字符缓冲流&#xff08;BufferedReader&#xff09;读取文本中的数据。 1、FileInputStream读取文本 public void read(){String path "fileTest.txt";F…

JDK新增史上最无用提案!竟是为了简化Hello World?

前两天JDK 20更新了&#xff0c;很多人表示很失望&#xff0c;但是我万万没想到的是&#xff0c;还有更令人失望的。 OpenJDK最近又增加了一个新提案&#xff0c;JEP 445&#xff0c;这个提案的主要内容是要简化Hello World的写法。并且该新特性即将在Java 21中作为预览功能推出…

凌恩生物文献分享|多组学联合,病毒与宿主关联分析又升级了!

病毒是地球上数量最多的生物实体&#xff0c;在调控宿主群落组成、推动宿主进化及影响土壤元素的生物地球化学循环等方面起着非常重要的作用。病毒基因组结构简单&#xff0c;一般只含有单一核酸&#xff0c;探究病毒基因组在病毒的毒力系统、病毒的基因组进化与演变历程方面具…

FlinkX的安装与使用(异构数据同步工具——flinkx)

异构数据同步工具——flinkx - 知乎 一、概要简介 FlinkX是由袋鼠云开源基于Flink的分布式离线和实时相结合的数据同步框架&#xff0c;既可以采集静态的数据比如&#xff1a;MYSQL,HDFS等&#xff0c;也可以采集实时变化的数据比如&#xff1a;MYSQL BINLOG,KAFKA等。目前官方…

【1187. 使数组严格递增】

来源&#xff1a;力扣&#xff08;LeetCode&#xff09; 描述&#xff1a; 给你两个整数数组 arr1 和 arr2&#xff0c;返回使 arr1 严格递增所需要的最小「操作」数&#xff08;可能为 0&#xff09;。 每一步「操作」中&#xff0c;你可以分别从 arr1 和 arr2 中各选出一个…

如何在苹果Mac OS系统中安装MT4电脑版软件?

很多投资者可能已经发现了&#xff0c;当前市面上绝大部分的正规交易平台&#xff0c;都在使用MT4电脑版软件作为平台专用的交易工具。而市面上的电脑系统主要又分为微软Windows系统和苹果Mac OS系统&#xff0c;对于微软Windows系统的MT4电脑版软件安装&#xff0c;想必大家都…