iT邦幫忙

2022 iThome 鐵人賽

DAY 28
0
自我挑戰組

前端菜鳥的react初體驗系列 第 28

前端菜鳥的react初體驗 Day28-To Do list(3)

  • 分享至 

  • xImage
  •  

今天就要把To-do-list的下半部完成啦!

我們在父層引用了一個<TodoList>,並傳了一些東西進去。

<div>
    <TodoList items={this.state.items} onDeleteItem={this.handleDeleteItem} />
</div>

在這裡,我們把存放todos的items渲染出來,react在渲染多筆資料通常會用.map
而每一個items裡面的配置也都是重複的,所以會在有一個子層是<TodoItem>

如果忘記架構的話,圖在這兒。
紅色框框是<TodoList>,框框裡面每一列同樣顏色的區塊,就是每一個<TodoItem>
https://ithelp.ithome.com.tw/upload/images/20221013/20152660qgqyD2YRBn.png
因此,我們需要把item的id傳給<TodoItem>,這樣在操作每一個todo項目的時候,才知道對應到誰。
並且再度把onDeleteItem傳下去。

class TodoList extends React.Component {
  render() {
    return (
      <ul>
        {this.props.items.map(item => (
          <TodoItem key={item.id} id={item.id} text={item.text} 
          onDeleteItem={this.props.onDeleteItem} />
        ))}
      </ul>
    );
  }
}

最後就是每一筆item的組件<TodoItem>
在這裡,把刪除的function跟參數綁好(要知道要刪掉哪一筆)。
然後呈現我們的每一筆todo的資料。
就!
大功告成了。

class TodoItem extends React.Component {
  constructor(props) {
    super(props);
    this.deleteItem = this.deleteItem.bind(this);
  }
  //刪除todo
  deleteItem(event) {
    this.props.onDeleteItem(this.props.id);
  }
  render() {
    return (
      <div>
        <label>
          <input type="checkbox" /> {this.props.text}
        </label>
        <button type="button" onClick={this.deleteItem}>x</button>
      </div>
    );
  }
}

走到這裡,就是一個沒有任何美麗裝飾,但是堪用的todolist了!
欸,今天好像沒有梗圖,應該要補一下吧!
距離完成鐵人30還有兩天。

https://ithelp.ithome.com.tw/upload/images/20221013/20152660xvaZiKNmXG.jpg


上一篇
前端菜鳥的react初體驗 Day27-To Do list(2)
下一篇
前端菜鳥的react初體驗 Day29-To Do list(4)
系列文
前端菜鳥的react初體驗30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言