Rumah  >  Soal Jawab  >  teks badan

Klon komponen berfungsi dalam React

Saya cuba mengubah suai dan mengklon elemen kanak-kanak bagi komponen yang saya buat dan baru-baru ini melihat perubahan dalam cara children 类型根据我传递 children saya berubah >.

Sebagai contoh, jika saya lulus JSX semasa kecil:

<MyComponent>
  <div>Hello</div>
</MyComponent>

Apabila saya memeriksa struktur MyComponent 中的 children, saya dapat melihat objek seperti berikut:

{
  '$$typeof': Symbol(react.element),
  type: 'div',
  key: null,
  ref: null,
  props: { children: 'hello' },
  _owner: null,
  _store: {}
}

Sejak props.children 存在,所以 React.cloneElement anda boleh menggunakannya terus.

Jika saya mencipta komponen berfungsi seperti ini:

const Hello: React.FC = () => <div>hello</div>;

Dan cuba gunakannya seperti ini:

<MyComponent>
  <Hello/>
</MyComponent>

Kemudian struktur objek children menjadi seperti ini:

{
  '$$typeof': Symbol(react.element),
  type: [Function: Hello],
  key: null,
  ref: null,
  props: {},
  _owner: null,
  _store: {}
}

Saya tidak lagi boleh menggunakan React.cloneElement,除非我调用children.type() tetapi saya tidak dapat mencari banyak dokumentasi mengenainya.

Mengapa ini berlaku? Adakah ini dijangkakan? Adakah memanggil children.type() satu-satunya cara untuk mengklon seluruh pokok unsur kanak-kanak?

P粉851401475P粉851401475377 hari yang lalu431

membalas semua(1)saya akan balas

  • P粉744691205

    P粉7446912052023-09-11 14:15:23

    Hello
    是一个 div, ialah fungsi yang mengembalikan div , jadi jelas ia bukan perkara yang sama. < br> 有一个空对象作为 props,因为它没有子对象,而且我们没有向它传递一个带有值的属性,因此 props{}.

    Apa yang anda benar-benar ingin akses dan klon ialah anak-anak elemen JSX induk yang dikembalikan, tanpa mengira prop mereka.
    Elemen JSX induk yang dikembalikan sebenarnya ialah children.type() (fungsi yang dikembalikan) yang membalut kanak-kanak di dalamnya (Hello), jadi children.type().props.children< /code> turut hadir di sini supaya anda boleh mengklonkannya.

    balas
    0
  • Batalbalas