React 入门实例 学习笔记 四、 TodoApp 功能分步实现

博主介绍:大爽歌, b站小UP主直播编程+红警三python1对1辅导老师

本博客为microsoft的的Frontend Bootcamp 的day1中 react 部分的学习笔记

笔记目录: React 入门实例 学习笔记 目录
请先看目录,按照目录先后顺序阅读实践
本博客有对应视频版本,具体见目录。

0 分支检出

使用vs-code
从上一节的分支todoapp-v1,检出分支todoapp-v2
具体见视频:
【代码过程】 React 入门实例 TodoApp 学习梳理笔记

1 TodoList 实现

之前TodoList的TodoListItem 中的内容是写死的。
这里改为根据Todos的数据,动态生成内容。

再修改src/TodoApp.tsx,添加defaultTodos
TodoApp中添加todos并进行传参。
修改后如下

import React from 'react';
import {
   
    TodoHeader } from './components/TodoHeader.tsx';
import {
   
    TodoList } from './components/TodoList.tsx';
import {
   
    TodoFooter } from './components/TodoFooter.tsx';

const defaultTodos = [
  {
   
   
    id: '01',
    label: 'Todo 1',
    status: 'completed',
  },
  {
   
   
    id: '02',
    label: 'Todo 2',
    status: 'active',
  },  
  {
   
   
    id: '03',
    label: 'Todo 2',
    status: 'active',
  },  
  {
   
   
    id: '04',
    label: 'Todo 3',
    status: 'completed',
  },
]

export const TodoApp = props => {
   
   
  const [todos, setTodos] = React.useState(defaultTodos);

  return (
    <div>
      <TodoHeader />
      <TodoList todos={
   
   todos}/>
      <TodoFooter />
    </div>
  )
}

再修改src/components/TodoList.tsx成如下

import React from 'react';
import {
   
    TodoListItem } from './TodoListItem.tsx';

export const TodoList = (props) => {
   
   
  const {
   
    todos } = props;

  return (
    <ul className='todos'>
      {
   
   todos.map((todo)=> <TodoListItem key={
   
   todo.id} {
   
   ...todo} />)}
    </ul>
  )
}

再修改src/components/TodoListItem.tsx成如下

import React from 'react';

export const TodoListItem = (props) => {
   
   
  const {
   
    label, status, id } = props;

  return (
    <li className="todo">
      <label>
        <input type="checkbox" checked={
   
   status === 'completed'} /> {
   
   label}
      </label>
    </li>
  );
}

然后TodoList部分就可以动态展示todos的数据内容了

2 TodoListItem checkbox(复选框) 功能实现

目前TodoListItem的 checkbox(复选框) 是无法勾选的。
需要实现选中和取消选中功能。

修改src/TodoApp.tsx, 添加toggleCompleted方法并传参给TodoList
修改后如下

import React from 'react';
import {
   
    TodoHeader } from './components/TodoHeader.tsx';
import {
   
    TodoList } from './components/TodoList.tsx';
import {
   
    TodoFooter } from './components/TodoFooter.tsx';

const defaultTodos = [
  {
   
   
    id: '01',
    label: 'Todo 1',
    status: 'completed',
  },
  {
   
   
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值