花了一些时间学习React后,我理解了创建组件的两个主要范例之间的区别
我的问题是我什么时候应该使用哪一个?为什么?一个在另一个上有什么好处/权衡?
ES6 / 7课程:
import React, { Component } from 'react';
export class MyComponent extends Component {
render() {
return (
<div></div>
);
}
}
功能:
const MyComponent = (props) => {
return (
<div></div>
);
}
只要没有任何状态被该组件操纵,我就会想到功能......但是这样吗?
我猜我是否使用任何生命周期方法,最好使用基于类的组件 .
3 回答
功能组件不比基于类的组件更轻量级,"they perform exactly as classes." - https://github.com/facebook/react/issues/5677
上面的链接有点过时,但React 16.3.1的文档说明功能和类组件:
"are equivalent from React’s point of view." - https://reactjs.org/docs/components-and-props.html#stateless-functions
除了语法之外,功能组件和仅实现render方法的类组件之间基本上没有区别 .
在我看来,一致性是要走的路 . 我经常使用基于类的组件来实现“附加功能”,例如状态,但也喜欢将它们用于我的“功能组件”,只是为了保持一致 .
在将来(引用上面的链接)"we [React] might add such optimizations"但是现在我的团队已经发现一致性是最好的选择(特别是对于不可避免的新开发人员而言,并且对于
this.props
去了或者意外地命名功能组件中的其他东西感到困惑) .始终尽可能尝试使用无状态功能(功能组件) . 在某些情况下,您需要使用常规的React类:
组件需要维护状态
组件重新渲染太多,您需要通过
shouldComponentUpdate
来控制它你需要container component
更新
现在有一个名为
PureComponent
的React类,您可以扩展(而不是Component
),它实现了自己的shouldComponentUpdate
,为您处理浅层道具比较 . Read more你有正确的想法 . 如果你的组件没有做太多的东西而不是接受一些道具和渲染,那么就去使用 . 您可以将这些视为纯函数,因为它们将始终呈现并表现相同,给定相同的道具 . 此外,他们不关心生命周期方法或有自己的内部状态 .
因为它们是轻量级的,所以将这些简单的组件编写为功能组件是非常标准的 .
如果您的组件需要更多功能,例如保持状态,请改用类 .
更多信息:https://facebook.github.io/react/docs/reusable-components.html#es6-classes