我聽說這樣做測試會更好,但我不明白爲什麼。每次有什麼變化而不是改變已有的東西時,它有什麼作用建立一個新的狀態?速度更快嗎?Redux背後的哲學是什麼,完全取代了狀態而不是每次都改變它?
0
A
回答
0
關於這個問題,請閱讀Redux docs,但基本上它使每個更新都更加易用,這使得從測試到渲染都變得更簡單。
1
不,它不是更快。直接改變狀態通常更快。
返回一個新的狀態使得reducer更容易測試和預測(因爲沒有副作用),我們也可以防止一些意外的行爲發生。例如,如果您使用的是PureComponent
,並且您直接改變狀態,則您的組件可能無法按預期更新,因爲PureComponent
使用===
來比較道具。
考慮下面的代碼,我們試圖呈現一個列表:
// current state
const list = ['foo', 'bar']
// we mutate the state directly
list[1] = 'hihi'
// in shouldComponentUpdate of a PureComponent
props.list === nextProps.list // true
在這種情況下,組件將不會意識到更新。
除了PureComponent
之外,在react-redux中還有一些優化依賴於這個約定。
相關問題
- 1. 它是否反對redux哲學將複製狀態複製到本地狀態?
- 2. R中工作空間背後的哲學是什麼?
- 3. 爲什麼刀節點狀態總是每次都不可用?
- 4. Random.Range每次調用都不改變它的結果,爲什麼?
- 5. Redux中的狀態是什麼?
- 6. 爲什麼redux每次更改都需要複製數據?
- 7. 爲什麼不聲明每個變量都是靜態的
- 8. 色輪背後的數學是什麼
- 9. -webkit-perspective背後的數學是什麼?
- 10. 什麼是Metro,它會完全取代.NET嗎?
- 11. 灰燼狀態沒有完全改變了國家在以前的狀態
- 12. 默認情況下在Scala中創建實例變量背後的哲學是什麼?
- 13. scala爲什麼每個迭代參數都是val而不是var for循環
- 14. 爲什麼不是每種方法都是靜態方法?
- 15. 共享/靜態變量應該什麼都不是 - 給出了什麼?
- 16. 取代d3.js圖,而不是每次都創建一個新的圖
- 17. 爲什麼K-map的狀態是按00,01,11,10而不是00,01,11,10?
- 18. 是否在每個瀏覽器中都完全啓用了CSS3?
- 19. Redux翻轉卡狀態 - 它應該是有狀態組件嗎?
- 20. PHP password_hash每次都改變
- 21. 爲什麼整個頁面的背景色都被改變了?
- 22. 爲什麼java中的CountDownLatch不能再改變它的狀態?
- 23. Redux的狀態值全球
- 24. 爲什麼我的Redux狀態是嵌套的?
- 25. 爲什麼需要不可變狀態的redux
- 26. 爲什麼我的輸出不會隨着每次循環迭代而改變?
- 27. 爲什麼棧,堆的虛擬地址每次都改變?
- 28. 朱莉婭語言和哲學的精神是什麼?
- 29. React + Redux,如何渲染不是在每次調度之後,而是在幾次之後?
- 30. 爲什麼使用react-redux而不僅僅是redux?
用你的例子,如果你不直接改變列表而是使用一個新列表,那麼新列表如何轉到nextProps並且舊列表是否保留了props? – stackjlei
爲什麼不呢? Redux只是將新列表傳遞給組件 – CodinCat
實際上,做出的反應非常簡單。 newProps將被分配給實例'inst.props = nextProps' – CodinCat