Sunting: Dengan pengenalan Hooks
itu mungkin untuk mengimplementasikan jenis siklus hidup perilaku serta negara dalam Komponen fungsional. Saat ini
Hooks adalah proposal fitur baru yang memungkinkan Anda menggunakan status dan fitur React lainnya tanpa menulis kelas. Mereka dirilis di React sebagai bagian dari v16.8.0
useEffect
hook dapat digunakan untuk mereplikasi perilaku siklus proses, dan useState
dapat digunakan untuk menyimpan status dalam komponen fungsi.
Sintaks dasar:
useEffect(callbackFunction, [dependentProps]) => cleanupFunction
Anda dapat menerapkan kasus penggunaan Anda dalam kait seperti
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
juga dapat mengembalikan fungsi yang akan dijalankan saat komponen dilepas. Ini dapat digunakan untuk berhenti berlangganan pendengar, meniru perilaku componentWillUnmount
:
Misalnya: componentWillUnmount
useEffect(() => {
window.addEventListener('unhandledRejection', handler);
return () => {
window.removeEventListener('unhandledRejection', handler);
}
}, [])
Untuk membuat useEffect
kondisional pada peristiwa tertentu, Anda dapat menyediakannya dengan array nilai untuk memeriksa perubahan:
Misalnya: componentDidUpdate
componentDidUpdate(prevProps, prevState) {
const { counter } = this.props;
if (this.props.counter !== prevState.counter) {
// some action here
}
}
Hooks Equivalent
useEffect(() => {
// action here
}, [props.counter]); // checks for changes in the values in this array
Jika Anda menyertakan larik ini, pastikan untuk menyertakan semua nilai dari lingkup komponen yang berubah seiring waktu (alat peraga, status), atau Anda mungkin akhirnya mereferensikan nilai dari render sebelumnya.
Ada beberapa kehalusan untuk digunakan useEffect
; lihat API Here
.
Sebelum v16.7.0
Properti komponen fungsi adalah mereka tidak memiliki akses ke fungsi siklus hidup Reacts atau this
kata kunci. Anda perlu memperluas React.Component
kelas jika ingin menggunakan fungsi siklus proses.
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>
)
}
}
Komponen fungsi berguna ketika Anda hanya ingin merender Komponen tanpa memerlukan logika tambahan.