Hal pertama yang perlu diperhatikan adalah bahwa komponen fungsional stateless tidak dapat memiliki metode, Anda tidak boleh mengandalkan panggilan updateatau drawrender Balljika 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 Balldan mengikatnya dengan properti, membuat kode lebih bersih dan membuat fungsi updateatau drawdapat digunakan kembali.
const update (propX, a, b) => { ... };
const Ball = props => (
<Something onClick={update.bind(null, props.x)} />
);
Jika Anda menggunakan hook , Anda bisa menggunakan useCallbackuntuk memastikan fungsi hanya didefinisikan ulang ketika salah satu dependensinya ( props.xdalam 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 updatefungsi dalam useCallbackkait itu sendiri di luar komponen menjadi keputusan desain lebih dari apa pun, Anda harus mempertimbangkan jika Anda akan menggunakan kembali updatedan / 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.