前幾篇有提到這兩種方式定義的組件,也有另外稱呼這兩者為Stateful & Stateless Components
在React16.8以前Functional Components沒有內部狀態(State),所以是Stateless Components(沒有state元件的class也一樣),這裡可以參考這篇的範例,可以明顯看出兩者方便性的差異。
渲染時機
對於class即使狀態沒有改變,只要使用setState Function就會觸發組件的渲染(render),如果上面連結的範例改成:
export default class Greeting extends React.Component {
constructor(props) {
super(props);
this.state = {
name: 'Mark'
}
this.handleNameChange = this.handleNameChange.bind(this)
}
handleNameChange(e) {
this.setState({
name: 'Mark'
})
}
就算是值一樣,但有使用到setState()就會使組件重新渲染。
而Functional則是只有狀態值真正改變後,才會觸發render,所以有些情況可以擋掉一些不必要的渲染,另外還有一點是父子組件中,無論是class或functional,只要父組件重新渲染,子組件也會再渲染。