Doğru fikre sahipsiniz. Bileşeniniz bazı sahne ve render almaktan daha fazlasını yapmazsa işlevsel hale geçin. Bunları saf işlevler olarak düşünebilirsiniz, çünkü aynı sahne öğeleri göz önüne alındığında her zaman aynı şekilde davranacak ve davranacaklardır. Ayrıca, yaşam döngüsü yöntemleri ile ilgilenmezler veya kendi iç durumlarına sahiptirler.
Hafif olduklarından, bu basit bileşenleri işlevsel bileşenler olarak yazmak oldukça standarttır.
Bileşenlerinizin durum koruma gibi daha fazla işlevselliğe ihtiyacı varsa, bunun yerine sınıfları kullanın.
Daha fazla bilgi: https://facebook.github.io/react/docs/reusable-components.html#es6-classes
DÜZENLEME : Tepki Kancaları tanıtılıncaya kadar yukarıdakilerin çoğu doğruydu.
componentDidUpdate
ile çoğaltılabilir useEffect(fn)
, fn
yeniden oluşturma sırasında çalıştırılacak işlev nerede .
componentDidMount
yöntemlerle çoğaltılabilir useEffect(fn, [])
, burada fn
yeniden oluşturma sırasında çalıştırılacak işlev vardır []
ve yalnızca önceki oluşturma işleminden bu yana en az bir değer değiştiyse, bileşenin yeniden gönderileceği bir nesne dizisidir. Hiçbiri olmadığından, useEffect()
ilk montajda bir kez çalışır.
state
useState()
dönüş değeri durumun bir referansına ve durumu ayarlayabilen bir işleve (yani, const [state, setState] = useState(initState)
) tahrip edilebilen ile çoğaltılabilir . Bir örnek bunu daha açık bir şekilde açıklayabilir:
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
Sınıfın fonksiyonel bileşenler üzerinde ne zaman kullanılacağına dair tavsiyeyle ilgili olarak, Facebook resmi olarak mümkün olan her yerde fonksiyonel bileşenlerin kullanılmasını önerir . Küçük bir kenara, performans nedenleriyle fonksiyonel bileşenleri kullanmadığını tartışan birkaç kişinin duydum, özellikle
"Olay işleme işlevleri, işlevsel bileşenlerde oluşturma başına yeniden tanımlanıyor"
Doğru olsa da, lütfen bileşenlerinizin gerçekten kaygılanmaya değer bir hızda veya hacimde oluşturulup oluşturulmadığını düşünün.
Öyleyse useCallback
ve useMemo
kancaları kullanarak işlevleri yeniden tanımlamayı önleyebilirsiniz . Ancak, bunun kodunuzu (mikroskopik olarak) performansta daha kötü hale getirebileceğini unutmayın .
Ama dürüst olmak gerekirse, React uygulamalarında bir darboğazın yeniden tanımlandığını hiç duymadım. Erken optimizasyonlar tüm kötülüklerin köküdür - bir sorun olduğunda endişelen