Hal pertama yang perlu diperhatikan adalah bahwa komponen fungsional stateless tidak dapat memiliki metode, Anda tidak boleh mengandalkan panggilan update
atau draw
render Ball
jika itu adalah komponen fungsional stateless.
Dalam kebanyakan kasus, Anda harus mendeklarasikan fungsi di luar fungsi komponen sehingga Anda mendeklarasikannya hanya sekali dan selalu menggunakan kembali referensi yang sama. Saat Anda mendeklarasikan fungsi di dalamnya, setiap kali komponen dirender, fungsi tersebut akan ditentukan lagi.
Ada beberapa kasus di mana Anda perlu mendefinisikan fungsi di dalam komponen untuk, misalnya, menetapkannya sebagai pengendali kejadian yang berperilaku berbeda berdasarkan properti komponen. Tapi tetap saja Anda bisa mendefinisikan fungsi di luar Ball
dan mengikatnya dengan properti, membuat kode lebih bersih dan membuat fungsi update
atau draw
dapat digunakan kembali.
const update (propX, a, b) => { ... };
const Ball = props => (
<Something onClick={update.bind(null, props.x)} />
);
Jika Anda menggunakan hook , Anda bisa menggunakan useCallback
untuk memastikan fungsi hanya didefinisikan ulang ketika salah satu dependensinya ( props.x
dalam kasus ini) berubah:
const Ball = props => {
const onClick = useCallback((a, b) => {
}, [props.x]);
return (
<Something onClick={onClick} />
);
}
Ini cara yang salah :
const Ball = props => {
function update(a, b) {
}
return (
<Something onClick={update} />
);
}
Saat menggunakan useCallback
, mendefinisikan update
fungsi dalam useCallback
kait itu sendiri di luar komponen menjadi keputusan desain lebih dari apa pun, Anda harus mempertimbangkan jika Anda akan menggunakan kembali update
dan / atau jika Anda perlu mengakses ruang lingkup penutupan komponen, misalnya, baca / tulis negara. Secara pribadi saya memilih untuk mendefinisikannya di dalam komponen secara default dan membuatnya dapat digunakan kembali hanya jika diperlukan, untuk mencegah rekayasa berlebihan dari awal. Selain itu, menggunakan kembali logika aplikasi lebih baik dilakukan dengan hook yang lebih spesifik, meninggalkan komponen untuk tujuan presentasi. Mendefinisikan fungsi di luar komponen saat menggunakan hook benar-benar bergantung pada nilai decoupling dari React yang Anda inginkan untuk logika aplikasi Anda.