在 React 中克隆功能元件
P粉851401475
P粉851401475 2023-09-10 17:44:34
0
1
377

我試圖修改和複製我正在建立的元件的子元素,最近注意到我的children類型根據我傳遞children的方式而發生變化>.

例如,如果我將 JSX 當作孩子傳遞:

 
Hello

當我檢查MyComponent中的children結構時,我可以看到該物件如下:

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

由於props.children存在,所以React.cloneElement可以直接使用它。

如果我創建一個像這樣的功能元件:

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

並嘗試像這樣使用它:

  

那麼children物件的結構就變成這樣了:

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

我不能再使用React.cloneElement,除非我呼叫children.type(),但我找不到太多相關文件。

為什麼會發生這種情況?這是預期的嗎?呼叫children.type()是克隆整個子元素樹的唯一方法嗎?

P粉851401475
P粉851401475

全部回覆 (1)
P粉744691205

Hello
是 div, 是一個傳回 div 的函數,所以顯然它們不是同一件事。 有一個空物件作為 props,因為它沒有子對象,而且我們沒有向它傳遞一個帶有值的屬性,因此 props{}

您真正想要存取和複製的是 傳回的父 JSX 元素的子元素,這與其 props 無關。
傳回的父JSX 元素實際上是children.type()(函數傳回的內容)該元素將childs 包裹在其中(Hello),因此children.type().props.children 也存在於此,因此您可以克隆它。

    最新下載
    更多>
    網站特效
    網站源碼
    網站素材
    前端模板
    關於我們 免責聲明 Sitemap
    PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!