React: Pertanyaan: Bisakah useMemo digunakan sebagai pengganti useRef?

Dibuat pada 3 Feb 2020  ·  3Komentar  ·  Sumber: facebook/react

Hai, hanya karena penasaran, dapatkah useMemo digunakan alih-alih useRef ketika melakukannya sebagai berikut:

Contoh:

const ref = useRef(null);
const ref2 = useMemo(() => { current: null }, []);

Bagi saya, kedua ref akan berfungsi dengan baik sebagai referensi DOM dan sebagai nilai yang bisa berubah mirip dengan bidang contoh di kelas. Mengapa useRef diimplementasikan secara berbeda dibandingkan dengan useMemo mengingat kode ReactFiberHooks.js untuk useRef dan useMemo ?

Terima kasih!

Invalid Question

Komentar yang paling membantu

Anda dapat membuat objek ref dengan cara ini, tetapi akan kurang efisien karena useMemo juga melacak dan membandingkan dependensi. (Bahkan jika Anda menentukan larik dependensi kosong, struktur data yang mendasari untuk memo hook memiliki ruang untuk nilai ekstra.)

Untuk menggambarkan ini, Anda dapat membandingkan implementasi useRef :
https://github.com/facebook/react/blob/434770c3b4b94315c789234c27ed9dc2ec8a78ad/packages/react-reconciler/src/ReactFiberHooks.js#L907 -L920

Untuk useMemo :
https://github.com/facebook/react/blob/434770c3b4b94315c789234c27ed9dc2ec8a78ad/packages/react-reconciler/src/ReactFiberHooks.js#L1126 -L1156

Karena kedua pengait sering digunakan, penting agar keduanya bekerja secara optimal: smile: jadi penerapannya berbeda.

Semua 3 komentar

Anda dapat membuat objek ref dengan cara ini, tetapi akan kurang efisien karena useMemo juga melacak dan membandingkan dependensi. (Bahkan jika Anda menentukan larik dependensi kosong, struktur data yang mendasari untuk memo hook memiliki ruang untuk nilai ekstra.)

Untuk menggambarkan ini, Anda dapat membandingkan implementasi useRef :
https://github.com/facebook/react/blob/434770c3b4b94315c789234c27ed9dc2ec8a78ad/packages/react-reconciler/src/ReactFiberHooks.js#L907 -L920

Untuk useMemo :
https://github.com/facebook/react/blob/434770c3b4b94315c789234c27ed9dc2ec8a78ad/packages/react-reconciler/src/ReactFiberHooks.js#L1126 -L1156

Karena kedua pengait sering digunakan, penting agar keduanya bekerja secara optimal: smile: jadi penerapannya berbeda.

Anda _dapat_ membuat objek ref dengan cara ini, tetapi akan kurang efisien karena useMemo juga melacak dan membandingkan dependensi. (Bahkan jika Anda menentukan larik dependensi kosong, struktur data yang mendasari untuk memo hook memiliki ruang untuk nilai ekstra.)

Untuk menggambarkan ini, Anda dapat membandingkan implementasi useRef :
https://github.com/facebook/react/blob/434770c3b4b94315c789234c27ed9dc2ec8a78ad/packages/react-reconciler/src/ReactFiberHooks.js#L907 -L920

Untuk useMemo :
https://github.com/facebook/react/blob/434770c3b4b94315c789234c27ed9dc2ec8a78ad/packages/react-reconciler/src/ReactFiberHooks.js#L1126 -L1156

Karena kedua pengait sering digunakan, penting agar keduanya bekerja secara optimal 😄 agar penerapannya berbeda.

hai, bagaimana cara memformat kode seperti ini?
image

@ yaofly2012 GitHub memformat tautan seperti itu, jika Anda menautkan ke revisi file dan nomor baris tertentu.

  1. Buka file
  2. Klik pada nomor baris
  3. Tahan SHIFT dan klik nomor baris lain untuk memilih rentang
  4. Ketik "y" untuk menyematkan ke revisi saat ini
  5. Salin + tempel URL ke GitHub
Apakah halaman ini membantu?
0 / 5 - 0 peringkat