Alih-alih menulis komponen saya di dalam kelas, saya ingin menggunakan sintaks fungsi sebagai gantinya.
Bagaimana cara mengganti componentDidMount
, componentWillMount
di dalam komponen fungsi?
Apakah itu mungkin?
const grid = (props) => {
console.log(props);
let {skuRules} = props;
const componentDidMount = () => {
if(!props.fetched) {
props.fetchRules();
}
console.log('mount it!');
};
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>
)
}
Jawaban:
Sunting: Dengan pengenalan
Hooks
itu mungkin untuk mengimplementasikan jenis siklus hidup perilaku serta negara dalam Komponen fungsional. Saat iniuseEffect
hook dapat digunakan untuk mereplikasi perilaku siklus proses, danuseState
dapat digunakan untuk menyimpan status dalam komponen fungsi.Sintaks dasar:
Anda dapat menerapkan kasus penggunaan Anda dalam kait seperti
useEffect
juga dapat mengembalikan fungsi yang akan dijalankan saat komponen dilepas. Ini dapat digunakan untuk berhenti berlangganan pendengar, meniru perilakucomponentWillUnmount
:Misalnya: componentWillUnmount
Untuk membuat
useEffect
kondisional pada peristiwa tertentu, Anda dapat menyediakannya dengan array nilai untuk memeriksa perubahan:Misalnya: componentDidUpdate
Hooks Equivalent
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 APIHere
.Sebelum v16.7.0
Properti komponen fungsi adalah mereka tidak memiliki akses ke fungsi siklus hidup Reacts atau
this
kata kunci. Anda perlu memperluasReact.Component
kelas jika ingin menggunakan fungsi siklus proses.Komponen fungsi berguna ketika Anda hanya ingin merender Komponen tanpa memerlukan logika tambahan.
sumber
useEffect(() => { // action here }, [props.counter])
dipicu pada render awal sedangkan componentDidUpdate tidak.passing an empty array as second argument triggers the callback in useEffect only after the initial render
ini terdengar seperti cara hacky yang kotor untuk membangun sesuatu: / semoga tim yang bereaksi akan menghasilkan sesuatu yang lebih baik di rilis mendatang.Anda dapat menggunakan react-pure-lifecycle untuk menambahkan fungsi siklus hidup ke komponen fungsional.
Contoh:
sumber
Grid
? Saya tidak melihatnya didefinisikan di mana pun di cuplikan kode Anda? Jika Anda ingin menggunakan redux dengan ini juga, bisakah Anda lolos dengan sesuatu sepertiexport default lifecycle(methods)(connect({},{})(ComponentName))
?Solusi Satu: Anda dapat menggunakan API HOOKS react baru . Saat ini di React v16.8.0
Hooks memungkinkan Anda menggunakan lebih banyak fitur React tanpa kelas. Hooks menyediakan API yang lebih langsung ke konsep React yang sudah Anda ketahui: props, state, context, refs, dan lifecycle . Hooks memecahkan semua masalah yang diatasi dengan Recompose.
Catatan dari Penulis
recompose
(acdlite, 25 Okt 2018):Solusi Kedua:
Jika Anda menggunakan versi react yang tidak mendukung hook, jangan khawatir, gunakan
recompose
(Sabuk utilitas React untuk komponen fungsi dan komponen tingkat tinggi.) Sebagai gantinya. Anda dapat menggunakanrecompose
untuk melampirkanlifecycle hooks, state, handlers etc
ke komponen fungsi.Berikut adalah komponen tanpa render yang melampirkan metode siklus proses melalui siklus proses HOC (dari komposisi ulang).
sumber
Anda dapat membuat metode siklus proses Anda sendiri.
Fungsi utilitas
Pemakaian
sumber
Menurut dokumentasi:
lihat dokumentasi React
sumber
Jika Anda perlu menggunakan React LifeCycle, Anda perlu menggunakan Class.
Sampel:
sumber
Anda dapat menggunakan modul create-react-class. Dokumentasi resmi
Tentu Anda harus menginstalnya terlebih dahulu
Berikut adalah contoh yang berfungsi
sumber
jika Anda menggunakan react 16.8, Anda dapat menggunakan react Hooks ... React Hooks adalah fungsi yang memungkinkan Anda “terhubung ke” status React dan fitur siklus hidup dari komponen fungsi ... docs
sumber