欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

詳解React中的todo-list

 更新時(shí)間:2018年07月08日 10:27:25   作者:逗伴不是瓣  
這篇文章主要介紹了React中的todo-list的相關(guān)知識(shí),非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友參考下吧

基于React的一個(gè)簡(jiǎn)單Todo-list

先賭為快:在線DEMO,感覺(jué)還不錯(cuò)點(diǎn)一下star  -_- ~

源碼地址

一、已經(jīng)完成的功能

1、新增選項(xiàng)(默認(rèn)未完成)

2、完成狀態(tài)可以切換

3、當(dāng)前選項(xiàng)可以刪除

4、全部選項(xiàng)選中狀態(tài)切換

5、全部個(gè)數(shù),完成個(gè)數(shù),未完成個(gè)數(shù)實(shí)時(shí)讀取

6、刷新?tīng)顟B(tài)不變

7、雙擊可以編輯(有個(gè)坑:雙擊編輯內(nèi)input的keyUp Enter保存會(huì)連帶觸發(fā)blur失去焦點(diǎn)保存。已解決:通過(guò)設(shè)置一個(gè)可以保存的狀態(tài)控制)

二、待完成(新增路由)

三、目錄結(jié)構(gòu)

3.1、主要邏輯只涉及:Todo(父組件),TodoAdd(輸入框子組件一),TodoList(選項(xiàng)列表子組件二)

3.2、父子組件通過(guò)props(可以是自定義屬性、對(duì)象、回調(diào)函數(shù))通信,每個(gè)組件都有自己的state,可以通過(guò)setState改變當(dāng)前的state。

例如:新增的時(shí)候,父組件是如何知道新增了一個(gè)什么內(nèi)容呢?如下:

// Todo.jsx內(nèi)   
//1 傳遞給子組件的回調(diào)函數(shù),只要有心得內(nèi)容傳遞過(guò)來(lái),就更新當(dāng)前的:list。list只要更新,通過(guò)props傳遞給TodoList的data就會(huì)更新,DOM就會(huì)新增一個(gè)選項(xiàng)列表
  onAddSubmit(addTitle) {
    console.log("增加了:" + addTitle)
    let addItem = {
      title: addTitle,
      isFinished: false
    }
    this.state.list.unshift(addItem)
    this.setState({ list: this.state.list })
    this._saveToSession()
  }
// 通過(guò)props傳遞給子組件(等待使用)
<TodoAdd onAddSubmit={this.onAddSubmit} />

// TodoAdd.jsx
// 2、點(diǎn)擊enter鍵:有值就確認(rèn)增加
  _onKeyUpEnter(e) {
    if (e.keyCode == 13) {
      this.confirmAddItem()
    }
  }
  // 3、失去焦點(diǎn):有值就確認(rèn)增加
  _onBlurEnter(e) {
    this.confirmAddItem()
  }
  // 4、確認(rèn)增加,調(diào)用父組件的回調(diào)函數(shù),傳遞參數(shù)
  confirmAddItem() {
    if (this.state.title) {
      this.props.onAddSubmit(this.state.title) //把新增的內(nèi)容通過(guò)props傳進(jìn)來(lái)的回調(diào)函數(shù)告訴父組件Todo,有新的內(nèi)容來(lái)了
      // 置空當(dāng)前
      this.setState({
        title: ""
      })
    }
  }

其他:上面這個(gè)簡(jiǎn)單的父子組件的通信過(guò)程和es6模塊化通信非常類似,只是react做了優(yōu)化,比如上面的使用es6來(lái)模擬如下,只是做了通信模擬:

// Todo.js 父模塊
import TodoAdd from "./TodoAdd"
import TodoList from "./TodoList"
class Todo {
  constructor() {
    this.list = []
    this.TodoAdd = new TodoAdd({
      // 父模塊給子模塊的回調(diào)
      resetList: (content) => {
        if (content) {
          this._updateList(content)
        }
      }
    })
    this.TodoList = new TodoList({
      list: this.list,
    })
  }
  _updateList(content) {
    this.list.push(content)
    // 調(diào)用子模塊的方法更新內(nèi)部列表
    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、監(jiān)聽(tīng)父模塊是否要更新
  _getNewList(newList) {
    this.list = newList
    // 其他操作
  }
}
module.exports = TodoList

以上所述是小編給大家介紹的React中的todo-list ,希望對(duì)大家有所幫助,如果大家有任何疑問(wèn)歡迎給我留言,小編會(huì)及時(shí)回復(fù)大家的!

相關(guān)文章

  • React生命周期方法之componentDidMount的使用

    React生命周期方法之componentDidMount的使用

    這篇文章主要介紹了React生命周期方法之componentDidMount的使用,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-06-06
  • 基于webpack開(kāi)發(fā)react-cli的詳細(xì)步驟

    基于webpack開(kāi)發(fā)react-cli的詳細(xì)步驟

    這篇文章主要介紹了基于webpack開(kāi)發(fā)react-cli的詳細(xì)步驟,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-06-06
  • 淺談React雙向數(shù)據(jù)綁定原理

    淺談React雙向數(shù)據(jù)綁定原理

    在 React中是不存在雙向數(shù)據(jù)綁定的機(jī)制的,需要我們自己對(duì)其進(jìn)行實(shí)現(xiàn)。本文主要介紹一下React雙向數(shù)據(jù)綁定,感興趣的可以了解一下
    2021-11-11
  • react中hook介紹以及使用教程

    react中hook介紹以及使用教程

    這篇文章主要給大家介紹了關(guān)于react中hook及使用的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-12-12
  • 詳解react如何在組件中獲取路由參數(shù)

    詳解react如何在組件中獲取路由參數(shù)

    這篇文章主要介紹了詳解react如何在組件中獲取路由參數(shù),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-06-06
  • react路由守衛(wèi)的實(shí)現(xiàn)(路由攔截)

    react路由守衛(wèi)的實(shí)現(xiàn)(路由攔截)

    react不同于vue,通過(guò)在路由里設(shè)置meta元字符實(shí)現(xiàn)路由攔截。本文就詳細(xì)的介紹一下,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-08-08
  • 使用 React hooks 實(shí)現(xiàn)類所有生命周期

    使用 React hooks 實(shí)現(xiàn)類所有生命周期

    react 自 16.8 開(kāi)始,引入了 Hooks 概念,使得函數(shù)組件中也可以擁有自己的狀態(tài),并且可以模擬對(duì)應(yīng)的生命周期,這篇文章主要介紹了使用 React hooks 怎么實(shí)現(xiàn)類里面的所有生命周期,需要的朋友可以參考下
    2023-02-02
  • 詳解開(kāi)發(fā)react應(yīng)用最好用的腳手架 create-react-app

    詳解開(kāi)發(fā)react應(yīng)用最好用的腳手架 create-react-app

    本篇文章主要介紹了詳解開(kāi)發(fā)react應(yīng)用最好用的腳手架 create-react-app,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2018-04-04
  • React學(xué)習(xí)筆記之事件處理(二)

    React學(xué)習(xí)筆記之事件處理(二)

    這篇文章主要跟大家介紹了關(guān)于React中事件處理的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)React具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面跟著小編一起來(lái)學(xué)習(xí)學(xué)習(xí)吧。
    2017-07-07
  • 嘗試自己動(dòng)手用react來(lái)寫一個(gè)分頁(yè)組件(小結(jié))

    嘗試自己動(dòng)手用react來(lái)寫一個(gè)分頁(yè)組件(小結(jié))

    本篇文章主要介紹了嘗試自己動(dòng)手用react來(lái)寫一個(gè)分頁(yè)組件(小結(jié)),小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2018-02-02

最新評(píng)論