2016-08-01 22 views
2

我讀this post in the React blog時所描述的組件和解進程:轉化定製陣營元素到其不甘心正常的子元素

當它看到這個元素:

{ 
    type: Button, 
    props: { 
    color: 'blue', 
    children: 'OK!' 
    } 
} 

陣營會問鍵是什麼呈現。該按鈕將返回此 元素:

{ 
    type: 'button', 
    props: { 
    className: 'button button-blue', 
    children: { 
     type: 'b', 
     props: { 
     children: 'OK!' 
     } 
    } 
    } 
} 

我的問題是,這一功能直接暴露在所有的,或者以其他方式在某種程度上訪問?就像我如何將第一個對象翻譯成第二個對象?


搶佔爲什麼我問這個問題...

我建立一個排序表,其中表中的各個元件可以是字符串或反應的組分。如果他們是字符串,排序很容易。在元素是React組件的情況下,我發現我可以使用react-addons-text-content來提取文本並使用它進行排序。這樣定義

const el = <span>Text</span>; 

但不是一個:那一個元素我這樣定義工作正常

const Com =() => <span>Text</span>; 
const el = <Com />; 

對於我而言,我希望這些要處理的完全一樣,但react-addons-text-content能由於上述自定義元素和正常元素之間的區別,所以無法處理它。如果我可以從自定義元素表示形式轉換爲正常元素表示形式,它將全部工作。

我知道替代解決方案是爲每個元素存儲兩個值,一個用於顯示,另一個用於排序。但是如果我可以逃避而不重複一切,那對我來說似乎更可取。建議雖然歡迎,但我不是這方面的專家:)

+0

如何調用'render()'來獲取返回的值。 –

+0

它將不得不稍微複雜一點來處理功能組件和嵌套組件,但也許可以工作,我將不得不稍後使用它... – dumbmatter

+0

React獲取您提供的數據,並使用組件你定義生成DOM。那麼,爲什麼不對發送給組件的數據進行排序呢?他們將按照您對數據進行排序的順序進行渲染。 –

回答

0

有沒有簡單的方法來做到這一點,因爲組件可以是任意複雜,並依賴於DOM。所以這可能是一項昂貴的操作。像enzyme這樣的測試庫確實提供了API,但它對於我所想象的用例並沒有什麼意義。