Düzenleme: Tanıtımı ile, Hooks
bir yaşam döngüsü türü davranışın yanı sıra işlevsel Bileşenlerdeki durumu uygulamak mümkündür. Şu anda
Hook'lar, bir sınıf yazmadan state'i ve diğer React özelliklerini kullanmanıza izin veren yeni bir özellik teklifidir. React'te v16.8.0'ın bir parçası olarak yayınlanırlar
useEffect
hook, yaşam döngüsü davranışını kopyalamak useState
için kullanılabilir ve durumu bir işlev bileşeninde depolamak için kullanılabilir.
Temel sözdizimi:
useEffect(callbackFunction, [dependentProps]) => cleanupFunction
Kullanım durumunuzu aşağıdaki gibi kancalara uygulayabilirsiniz
const grid = (props) => {
console.log(props);
let {skuRules} = props;
useEffect(() => {
if(!props.fetched) {
props.fetchRules();
}
console.log('mount it!');
}, []); // passing an empty array as second argument triggers the callback in useEffect only after the initial render thus replicating `componentDidMount` lifecycle behaviour
return(
<Content title="Promotions" breadcrumbs={breadcrumbs} fetched={skuRules.fetched}>
<Box title="Sku Promotion">
<ActionButtons buttons={actionButtons} />
<SkuRuleGrid
data={skuRules.payload}
fetch={props.fetchSkuRules}
/>
</Box>
</Content>
)
}
useEffect
bileşen ayrıldığında çalışacak bir işlev de döndürebilir. Bu, aşağıdaki davranışları tekrarlayarak dinleyicilere aboneliğinizi iptal etmek için kullanılabilir componentWillUnmount
:
Örneğin: componentWillUnmount
useEffect(() => {
window.addEventListener('unhandledRejection', handler);
return () => {
window.removeEventListener('unhandledRejection', handler);
}
}, [])
useEffect
Belirli olaylara koşullu yapmak için, değişiklikleri kontrol etmek için ona bir dizi değer sağlayabilirsiniz:
Örneğin: componentDidUpdate
componentDidUpdate(prevProps, prevState) {
const { counter } = this.props;
if (this.props.counter !== prevState.counter) {
// some action here
}
}
Kancalar Eşdeğeri
useEffect(() => {
// action here
}, [props.counter]); // checks for changes in the values in this array
Bu diziyi dahil ederseniz, bileşen kapsamındaki zamanla değişen (props, durum) tüm değerleri dahil ettiğinizden emin olun, aksi takdirde önceki işlemelerden değerlere referans verebilirsiniz.
Kullanılacak bazı incelikler var useEffect
; API'ye bakın Here
.
V16.7.0'dan önce
İşlev bileşenlerinin özelliği, Reacts yaşam döngüsü işlevlerine veya this
anahtar sözcüğe erişimlerinin olmamasıdır . React.Component
Yaşam döngüsü işlevini kullanmak istiyorsanız sınıfı genişletmeniz gerekir .
class Grid extends React.Component {
constructor(props) {
super(props)
}
componentDidMount () {
if(!this.props.fetched) {
this.props.fetchRules();
}
console.log('mount it!');
}
render() {
return(
<Content title="Promotions" breadcrumbs={breadcrumbs} fetched={skuRules.fetched}>
<Box title="Sku Promotion">
<ActionButtons buttons={actionButtons} />
<SkuRuleGrid
data={skuRules.payload}
fetch={props.fetchSkuRules}
/>
</Box>
</Content>
)
}
}
Fonksiyon bileşenleri, yalnızca Bileşeninizi ekstra mantığa ihtiyaç duymadan işlemek istediğinizde kullanışlıdır.