详解React中的todo-list

 更新时间:2018年07月08日 10:27:25   作者:逗伴不是瓣  
这篇文章主要介绍了React中的todo-list的相关知识,非常不错,具有一定的参考借鉴价值,需要的朋友参考下吧

基于React的一个简单Todo-list

先赌为快:在线DEMO,感觉还不错点一下star  -_- ~

源码地址

一、已经完成的功能

1、新增选项(默认未完成)

2、完成状态可以切换

3、当前选项可以删除

4、全部选项选中状态切换

5、全部个数,完成个数,未完成个数实时读取

6、刷新状态不变

7、双击可以编辑(有个坑:双击编辑内input的keyUp Enter保存会连带触发blur失去焦点保存。已解决:通过设置一个可以保存的状态控制)

二、待完成(新增路由)

三、目录结构

3.1、主要逻辑只涉及:Todo(父组件),TodoAdd(输入框子组件一),TodoList(选项列表子组件二)

3.2、父子组件通过props(可以是自定义属性、对象、回调函数)通信,每个组件都有自己的state,可以通过setState改变当前的state。

例如:新增的时候,父组件是如何知道新增了一个什么内容呢?如下:

// Todo.jsx内   
//1 传递给子组件的回调函数,只要有心得内容传递过来,就更新当前的:list。list只要更新,通过props传递给TodoList的data就会更新,DOM就会新增一个选项列表
  onAddSubmit(addTitle) {
    console.log("增加了:" + addTitle)
    let addItem = {
      title: addTitle,
      isFinished: false
    }
    this.state.list.unshift(addItem)
    this.setState({ list: this.state.list })
    this._saveToSession()
  }
// 通过props传递给子组件(等待使用)
<TodoAdd onAddSubmit={this.onAddSubmit} />

// TodoAdd.jsx
// 2、點擊enter鍵:有值就確認增加
  _onKeyUpEnter(e) {
    if (e.keyCode == 13) {
      this.confirmAddItem()
    }
  }
  // 3、失去焦點:有值就確認增加
  _onBlurEnter(e) {
    this.confirmAddItem()
  }
  // 4、確認增加,调用父组件的回调函数,传递参数
  confirmAddItem() {
    if (this.state.title) {
      this.props.onAddSubmit(this.state.title) //把新增的内容通过props传进来的回调函数告诉父组件Todo,有新的内容来了
      // 置空當前
      this.setState({
        title: ""
      })
    }
  }

其他:上面这个简单的父子组件的通信过程和es6模块化通信非常类似,只是react做了优化,比如上面的使用es6来模拟如下,只是做了通信模拟:

// Todo.js 父模块
import TodoAdd from "./TodoAdd"
import TodoList from "./TodoList"
class Todo {
  constructor() {
    this.list = []
    this.TodoAdd = new TodoAdd({
      // 父模块给子模块的回调
      resetList: (content) => {
        if (content) {
          this._updateList(content)
        }
      }
    })
    this.TodoList = new TodoList({
      list: this.list,
    })
  }
  _updateList(content) {
    this.list.push(content)
    // 调用子模块的方法更新内部列表
    this.TodoList && this.TodoList._getNewList(this.list)
  }
}
module.exports = Todo

// TodoAdd.js 新增子模块
class TodoAdd {
  constructor({
    resetList,
  }) {
    this.resetList = resetList
  }
  _onSubmit(str) {
    if (str) {
      // 1、告诉父模块新增了
      this.resetList(str)
    }
  }
}
module.exports = TodoAdd

// TodoList.js 列表子模块
class TodoList {
  constructor({
    list,
  }) {
    this.list = []
    this._getNewList(list)
  }
  // 3、监听父模块是否要更新
  _getNewList(newList) {
    this.list = newList
    // 其他操作
  }
}
module.exports = TodoList

以上所述是小编给大家介绍的React中的todo-list ,希望对大家有所帮助,如果大家有任何疑问欢迎给我留言,小编会及时回复大家的!

相关文章

  • react中useState使用:如何实现在当前表格直接更改数据

    react中useState使用:如何实现在当前表格直接更改数据

    这篇文章主要介绍了react中useState的使用:如何实现在当前表格直接更改数据,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-08-08
  • React中的useMemo 和 useEffect 执行顺序

    React中的useMemo 和 useEffect 执行顺序

    在 React 组件的渲染过程中,useMemo 和 useEffect 的执行顺序是不同的,本文给大家介绍React中的useMemo 和 useEffect 哪个先执行,感兴趣的朋友一起看看吧
    2025-01-01
  • TypeScript在React项目中的使用实践总结

    TypeScript在React项目中的使用实践总结

    这篇文章主要介绍了TypeScript在React项目中的使用总结,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-04-04
  • React中useState的理解和使用案例

    React中useState的理解和使用案例

    Hook是React16.8的新增特性,它可以让你在不编写class的情况下使用state以及其他的React特性,本文中讲解的useState就是React中的其中一个Hook,这篇文章主要给大家介绍了关于React中useState理解和使用的相关资料,需要的朋友可以参考下
    2024-03-03
  • 基于react hooks,zarm组件库配置开发h5表单页面的实例代码

    基于react hooks,zarm组件库配置开发h5表单页面的实例代码

    这篇文章主要介绍了基于react hooks,zarm组件库配置开发h5表单页面,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-04-04
  • 关于react中列表渲染的局部刷新问题

    关于react中列表渲染的局部刷新问题

    这篇文章主要介绍了关于react中列表渲染的局部刷新问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-08-08
  • React中如何使用scss

    React中如何使用scss

    这篇文章主要介绍了React中如何使用scss问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-03-03
  • react实现同页面三级跳转路由布局

    react实现同页面三级跳转路由布局

    这篇文章主要为大家详细介绍了react实现同页面三级跳转路由布局,一个路由小案例,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-09-09
  • 在React 组件中使用Echarts的示例代码

    在React 组件中使用Echarts的示例代码

    本篇文章主要介绍了在React 组件中使用Echarts的示例代码,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-11-11
  • react基于react-slick实现多图轮播效果

    react基于react-slick实现多图轮播效果

    React slick是一个使用React构建的轮播组件,下面这篇文章主要给大家介绍了关于react基于react-slick实现多图轮播效果的相关资料,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2022-07-07

最新评论