我知道stateless
和statefull components
在反應中的區別。我想知道使用stateless
和statefull components
的有效方式是什麼。在任何特定情況下使用這個優點是否有任何性能優勢何時在反應中使用無狀態組件
2
A
回答
4
您應該默認使用無狀態組件。由於它們不使用狀態,所以很容易判斷何時應該重新渲染組件,因爲如果它們的道具不變,它們將顯示相同的內容。
當您需要使用setState
或需要使用生命週期掛鉤時,應該使用有狀態組件。
從理論上講,使用無狀態組件可能會帶來性能上的好處,因爲它們是純函數(或者應該是純函數),但我沒有任何硬編碼。
+1
警告:由於無狀態組件本身可能是非純的(例如:呈現當前時間),或者它們呈現非純組件作爲孩子,目前還沒有辦法表明無狀態組件實際上是純粹的,即使它們的道具沒有改變,React也不得不重新渲染它們。理論上無狀態組件甚至可能比常規組件慢,但我也沒有任何硬數字。 – Brandon
2
規級料件
類組件(具有狀態)可以當你想存儲組件內的一些局部數據中。爲例如 -
import React from 'react'
function handleInc (state, props) {
return {
count: state.count + 1
}
}
class App extends React.Component {
state = {
count: 0
}
handleClick =() => {
this.setState(handleInc);
}
render() {
return (
<div>
<button onClick={this.handleClick}>Increase</button>
<p>{this.state.count}</p>
</div>
);
}
}
這些組件也稱爲智能容器或部件,因爲它們容納所有的邏輯用於修改基於狀態(終極版圖案)的UI。
功能組件或無狀態組件
功能組件沒有狀態或任何本地數據。這些組件可用於通過傳遞父組件中的道具來更新某些UI。
<Child data={this.state.count} />
功能組件都有自己的優勢,如:
他們很容易測試。
他們很容易理解。
性能
- 有關
this
關鍵字無後顧之憂。
如果還有什麼,請參閱this文章。
相關問題
- 1. 在無狀態組件中反應contenteditable
- 2. 將反應類組件轉換爲反應無狀態組件
- 3. 反應過來渲染使用無狀態組件
- 4. 使用具有反應打字稿,無狀態組件
- 5. 反應。組件未在狀態改變
- 6. 使用數組反應本機狀態
- 7. 在無狀態組件中迭代兒童反應/反應本機
- 8. 反應:鉻反應工具標籤組件作爲無狀態組件
- 9. 在方法中使用狀態 - 反應
- 10. 反應原生不能在組件狀態使用布爾值
- 11. 確定無狀態的組件名稱中反應
- 12. 無狀態組件中的反應添加/刪除類onScroll
- 13. 反應:無狀態功能組件中的PropType
- 14. 無法在反應組件上設置狀態
- 15. 反應組件未更新狀態
- 16. 反應通過組件提升狀態
- 17. 如何清除反應狀態數組?
- 18. 反應本機渲染組件或者通過使用狀態
- 19. 打字稿+反應,從一個無狀態的功能組件
- 20. 反應,與打字稿觀察員無狀態組件
- 21. 如何使用字符串或狀態動態切換反應組件?
- 22. ReactJs:如何在無狀態組件中使用refs
- 23. 使用類而不是無狀態的功能組件 - 反應本機
- 24. 在使用redux時,是否在反應狀態下訪問狀態?
- 25. 在父母或孩子的組件中的反應狀態
- 26. 如何爲打字稿中的無狀態反應組件定義defaultProps?
- 27. 如何在反應中使用道具進行/訪問狀態?
- 28. 無法在組件中設置狀態
- 29. 用反應記住狀態
- 30. 反應處理的可重複使用的無狀態的組件單擊條件爲真時
我會建議你閱讀'無狀態功能組件'的stackoverflow文檔:http://stackoverflow.com/documentation/reactjs/6588/stateless-functional-components#t=201705031313055961133 –
除了@MayankShukla評論,這裏是另一篇文章您可能會發現有趣的 - 我剛纔寫的一篇文章:http://stackoverflow.com/questions/37170809/react-createclass-vs-es6-arrow-function/37170998#37170998。 – Chris
@Chris,真的很棒,我認爲你應該把它添加到DOC中,這樣它就可以輕鬆獲得:) –