我知道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中,这样它就可以轻松获得:) –