iT邦幫忙

第 11 屆 iThome 鐵人賽

DAY 19
1
Modern Web

被 React react 的後端工程師系列 第 19

[DAY19] 單向資料流之鮭魚逆流而上被石頭敲到不就_頭好痛

  • 分享至 

  • xImage
  •  

我想說的是
React 的寫法是 Functional Programming
單向資料流,只能

單向資料流

React 使用的是單向資料流
也就是說資料只有一個方向的傳遞
在按摩服務列表中父組件中可以直接把 this.state.list傳遞給子組件
這樣是沒問題的
例如:

<ul>
  {
    this.state.massageServiceList.map((massageService, index) => {
      return (
      <MassageService
        key={index+massageService}
        massageService={massageService}
        index={index}
        massageServiceList={this.state.massageServiceList}
        deleteService={this.deleteService}
      />
      )
    })
  }
</ul>

但是如果在子組件中我們去改變父組件傳來的資料

handleClick(){
    //關鍵區塊----
    this.props.massageServiceList=[]
    //-----------
    this.props.deleteItem(this.props.index)
}

會產生以下錯誤
TypeError: Cannot assign to read only property 'massageServiceList' of object '#<Object>'

也許可以理解成:子組件只負責展示結果,若要操作資料還是需要藉由父組件的方法
為什麼不雙向綁定資料呢?這原因其實也很簡單
萬一今天有個元素在多個子組件中都同時被修改
那到底該聽誰的?這種情況下就會產生衝突,為了避免衝突所以使用單向資料流

還有看到一個問題是能不能在 react 專案中使用 JQuery?
先說答案是可以,React只針對 index 下特定的 div
其他 DOM 並不受任何影響,但是盡量別這麼做,保持專案的技術一致
除非是不得已的情況,例如要緩慢更新網站的技術

Functional Programming

或是叫做函式編程,有什麼好處呢?

  • 讓我們的程式邏輯更清晰,每個功能都是一個函數
  • 為寫測試提供了極大的方便,更容易實現前端自動化測試

React 也是函數式編程
在大型多人開發的項目中會更加明顯,讓配合和交流都更得心應手
但是對於我這種寫物件導向 (OOP) 語言習慣的人
Functional Programming 是完全的思考方式,要花點時間適應


上一篇
[DAY18] Developer tools 與 Snippets 之老師我也想當金手指之 debug guy
下一篇
[DAY20] 過來讓我看看之 PropTypes 驗證元件屬性之這是我們之間的秘密
系列文
被 React react 的後端工程師30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言