第二十章 案例TodoList之动态数据

简介: 第二十章 案例TodoList之动态数据

我们之前已经实现了静态的组件拆分,既然是静态说明数据就是死的,显然这不是我们需要的结果,之前我们学习了React组件,知道组件里面的状态数据驱动了页面的显示,每个组件都有属于自己的状态数据。接下来我们改造组件使得组件有自己的状态数据。

分析组件之间的关系

首先我们知道Todolist案例的主要功能是:通过Header组件输入任务项添加任务,在由List组件展示任务项

思考1:Header组件和List组件可以通信吗?现目前好像不能实现兄弟组件的通信。

思考2:Header组件和List组件可以和谁通信?好像是App组件,因为它们是父子关系。

思考3: 我们可以通过App组件建立HeaderList组件之间的数据交互吗?好像可以。image.png

根据上图以及我们所学知识,可以知道父子组件可以通过props标签属性来进行组件之间的通信。那么我们可以让父组件的状态数据成为一个公共数据,可以同时传递给Header组件和List组件使用。

尝试编写代码

  • App组件
import React, { Component } from 'react'
import Header from "./components/Header"
import List from "./components/List"
import Footer from "./components/Footer"
import "./index.css"
export default class App extends Component {
  // 定义列表的初始状态数据
  state = {todos: [
    {id:'001',name:'吃饭',done: true},
    {id:'002',name:'睡觉',done: true},
    {id:'003',name:'写代码',done: false},
  ]}
  render() {
    const { todos } = this.state
    return (
      <div className="todo-container">
      <div className="todo-wrap">
        <Header/>
        <List todos={todos}/>
        <Footer/>
      </div>
    </div>
    )
  }
}

我们在App组件中定义了任务列表的初始状态数据,并把该数据使用props的方式传入了List组件。

  • List组件
import React, { Component } from 'react'
import Item from '../Item'
import "./index.css"
export default class List extends Component {
  render() {
    const {todos} = this.props
    return (
      <ul className="todo-main">
        {
          todos.map(todo=>{
            return <Item key={todo.id} {...todo}/>
          })
        }
      </ul>
    )
  }
}

我们在List组件中接收到了由App组件传递的数据,且遍历该数据,把单个任务项的数据以批量传递的形式{...todo}交给组件Item

  • Item组件
import React, { Component } from 'react'
import "./index.css"
export default class Item extends Component {
  render() {
    const {name,done} = this.props
    return (
      <li >
            <label>
              <input type="checkbox" defaultChecked={done}/>
              <span>{name}</span>
            </label>
            <button className="btn btn-danger" style={{display:"none"}}>删除</button>
      </li>
    )
  }
}

Item组件接收到props数据后,拿到name值放到span标签中进行展示,done值交给复选框的defaultChecked属性,用于展示任务项的默认状态是否被选中。

  • 查看效果

image.png

至此我们就完成数据在组件的动态传递,他们的传递方式是通过props

相关文章
|
容器
Flutter 组件(一)组件概述
Flutter 组件(一)组件概述
548 0
|
8月前
|
机器学习/深度学习 人工智能 自然语言处理
Qwen3强势来袭:推理力爆表、语言超百种、智能体协作领先,引领AI开源大模型
Qwen3强势来袭:推理力爆表、语言超百种、智能体协作领先,引领AI开源大模型
Qwen3强势来袭:推理力爆表、语言超百种、智能体协作领先,引领AI开源大模型
|
10月前
|
API C# 图形学
Unity调用Windows弹出确认框
在 Unity 中调用 Windows 弹出确认框,可通过 Windows API 或 .NET 框架实现。使用 Windows API 的方式是通过 P/Invoke 技术调用 MessageBox 函数,创建模态对话框。代码示例展示了如何在应用退出时弹出确认框,用户选择“确定”则退出游戏。此方法也适用于 ALT+F4 触发的退出确认。
|
弹性计算 容灾 对象存储
阿里云2核4G5M服务器一年和五年价格表_轻量和ECS租用费用
2023阿里云2核4G5M服务器一年和五年价格表_轻量和ECS租用费用
619 0
阿里云2核4G5M服务器一年和五年价格表_轻量和ECS租用费用
|
编解码 人工智能 自然语言处理
扩散模型的多元化应用:药物发现、文本生成、时间序列预测等
AlphaFold3是DeepMind的蛋白质结构预测软件,它引入扩散模型以提升预测准确性。扩散模型通过逐步添加和去除噪声来理解和生成数据,应用广泛,包括图像、音频、文本和时间序列数据的处理。在图像领域,它们擅长合成、编辑和超分辨率;在文本处理中,扩散模型在代码合成和问答任务中表现出色;在音频和视频生成方面也有重要应用;同时,它们在时间序列预测和增强模型鲁棒性方面也展现出潜力。随着技术发展,扩散模型将在更多领域发挥作用。
834 0
|
IDE 搜索推荐 开发工具
|
编解码 算法 计算机视觉
轻松掌握FFmpeg编程:从架构到实践
轻松掌握FFmpeg编程:从架构到实践
1980 1
|
存储 芯片
什么是虚地址,什么是物理地址?
什么是虚地址,什么是物理地址?
589 0
|
负载均衡 监控 Dubbo
Dubbo底层原理分析和分布式实际应用
Dubbo底层原理分析和分布式实际应用
549 0
|
Oracle 关系型数据库 MySQL
mycat链接oracle报错 未找到from关键字
mycat链接oracle报错 未找到from关键字
mycat链接oracle报错 未找到from关键字