2017-10-12 73 views
1

說我想用一些方法(沒有狀態或生命週期方法)創建一個簡單的React組件。我能做到這一點的兩種方法之一:在封閉中使用類或函數的方法

// Foo.js 
class Foo extends React.Component { 
    doSomething() { 
    // do something 
    } 

    render() { 
    ... 
    this.doSomething(); 
    ... 
    } 
} 
export default Foo; 

或者,我可以做這樣的:

// Foo.js 
const doSomething =() => { 
    // do something... 
} 

const Foo =() => { 
    ... 
    doSomething(); 
    ... 
} 
export default Foo; 

第二是可取的,因爲它是一個功能組件(簡單,開銷少),但確實的閉包函數會帶來任何開銷/內存泄漏風險?

一般情況下,如果一個組件不保存狀態或使用生命週期方法,這是實現組件的最佳方式嗎?

+1

在第一個示例中,它將是'this.doSomething()',不是嗎? – Bergi

+2

是什麼讓你認爲閉包會產生開銷或泄漏內存? – Bergi

+1

除生命週期方法和'狀態'''類'組件可以從父母調用處理程序並向上傳遞參數 –

回答

1

如果您沒有跟蹤應用程序狀態或生命週期方法,就沒有必要使用基於類的組件,僅僅因爲它有很多開銷,並且您不需要跟蹤關鍵字this坦率地說,這很煩人。

一個功能組件是愚蠢的。它完全不知道應用程序狀態。它可以用來顯示/呈現組件,而不必擔心發生事件時自行更新。

就你而言,如果doSomething()方法不涉及任何動態行爲,最好採用第二種方法。