Flux todoMVC 為什麼要費那麼多力氣實現一個功能!!!!,這樣寫的好處是神馬?

我設置全局的_list 數組就搞定了,誰能告訴我費力氣繞彎寫代碼的好處!!!

你看我這樣直接把_lists=[]寫到外面不是很簡單嗎,為什麼還要用Flux.

&
&
&
&
&

React:

相似地:Flux

我用我在寫的一個React+Flux的項目來舉個栗子:

組件狀態的同步, 導致舞台中央的元素變化的動作有:
1. 右側設置的值改變,2.時間軸的游標位置改變,3.開始播放,4.拖拽,5.點擊選中等等,
中間舞台的動作,同樣影響其他模塊

如果用MVC的模式,各種依賴繞過來繞過去,麻煩的一逼。用Flux單向數據流,任何狀態的改變,整個page重新"渲染"(當然不是真的全盤渲染),其他的有依賴的自然就更新了, 快刀斬亂麻;

核心還是這句話:


儘管我認為flux是個不錯的架構方案,但是對採用todo這種玩具應用來作為入門示例也是覺得非常蛋疼,flux本身就是作為大型應用架構的一種選項,入門級的例子即使不需要多龐大,整個CRUD不是更合乎邏輯?狗屁todo這種繞來繞去的確不能讓人體會到精髓。


你看我這樣直接把_lists=[]寫到外面不是很簡單嗎,為什麼還要用Flux.

這也是flux的核心之一,需要共享的數據寫在外面,在「寫在外面」這一點上,flux完全沒有什麼黑魔法,就是和你一樣寫在外面而已。

_lists.push(v);

再看這兒,你是在組件內部直接修改了那個「放在外面」的數據,這就不妥了,因為這個塊數據也能會被其他的組件所改寫,地方一多,在某個時間點上你就完全不知道這個list為什麼是當前這個樣子了。

flux的做法是,這塊數據只能被自己修改,組件只能給它發個消息,怎麼修改,修補修改,都有它自己決定,這樣list的表現就是一目了然的。

這就是響應式編程,模塊是自維護的,其他的模塊只能發消息。你的做法是就傳統編程,在A模塊里直接引入B模塊,這樣就耦合了,A必須知道B的所有細節。


一個組件對應一個狀態,確實用不著flux,即使你用react,也不需要用到redux,組件內部的state就夠你用了。但是當你多個組件共享並且修改一個數據狀態時,你就知道flux的作用了。

還是那句老話,當你猶豫要不要使用flux時,那就不要用。


我覺得問題的關鍵在於你這個state中的list只存在於這個組件,別的組件無法共享這個list裡面的數據。。。如果多個組件都要用到一個list中的數據你怎麼維護?


推薦閱讀:

如何評價 Airbnb 發布的 React Sketch.app 工具?
如何評價 React Native?

TAG:JavaScript | React | Flux |