Düzenleme: Tanıtımı ile, Hooksbir 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
useEffecthook, yaşam döngüsü davranışını kopyalamak useStateiç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>
)
}
useEffectbileş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);
}
}, [])
useEffectBelirli 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 thisanahtar sözcüğe erişimlerinin olmamasıdır . React.ComponentYaş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.