Anda punya ide yang tepat. Pergi dengan fungsional jika komponen Anda tidak melakukan lebih dari menerima beberapa alat peraga dan render. Anda dapat menganggap ini sebagai fungsi murni karena mereka akan selalu membuat dan berperilaku sama, mengingat alat peraga yang sama. Juga, mereka tidak peduli dengan metode siklus hidup atau memiliki kondisi internal mereka sendiri.
Karena ringan, penulisan komponen sederhana ini sebagai komponen fungsional cukup standar.
Jika komponen Anda membutuhkan lebih banyak fungsi, seperti menjaga status, gunakan kelas sebagai gantinya.
Info lebih lanjut: https://facebook.github.io/react/docs/reusable-components.html#es6-classes
EDIT : Banyak hal di atas benar, sampai diperkenalkannya React Hooks.
componentDidUpdate
dapat direplikasi dengan useEffect(fn)
, di mana fn
fungsi untuk dijalankan saat rerendering.
componentDidMount
metode dapat direplikasi dengan useEffect(fn, [])
, di mana fn
fungsi untuk dijalankan pada rerendering, dan []
merupakan array objek yang komponen akan rerender, jika dan hanya jika setidaknya satu telah mengubah nilai sejak render sebelumnya. Karena tidak ada, useEffect()
berjalan sekali, pada mount pertama.
state
dapat direplikasi dengan useState()
, yang nilai kembaliannya dapat dihancurkan ke referensi negara dan fungsi yang dapat mengatur negara (yaitu, const [state, setState] = useState(initState)
). Contoh mungkin menjelaskan ini dengan lebih jelas:
const Counter = () => {
const [count, setCount] = useState(0)
const increment = () => {
setCount(count + 1);
}
return (
<div>
<p>Count: {count}</p>
<button onClick={increment}>+</button>
</div>
)
}
default export Counter
Mengenai rekomendasi kapan menggunakan kelas atas komponen fungsional, Facebook secara resmi merekomendasikan penggunaan komponen fungsional sedapat mungkin . Di samping yang kecil, saya telah mendengar sejumlah orang berdiskusi tidak menggunakan komponen fungsional untuk alasan kinerja, khususnya itu
"Fungsi penanganan acara didefinisikan ulang per render dalam komponen fungsional"
Meskipun benar, harap pertimbangkan apakah komponen Anda benar-benar merender dengan kecepatan atau volume sedemikian rupa sehingga ini patut diperhatikan.
Jika ya, Anda dapat mencegah mendefinisikan ulang fungsi menggunakan useCallback
dan useMemo
kait. Namun, ingatlah bahwa ini dapat membuat kode Anda (secara mikroskopis) lebih buruk dalam kinerjanya .
Tapi jujur, saya belum pernah mendengar mendefinisikan ulang fungsi menjadi hambatan dalam aplikasi Bereaksi. Optimalisasi prematur adalah akar dari semua kejahatan - khawatir tentang ini ketika itu menjadi masalah