將原始數組作爲道具傳遞,但它似乎被React/jsx修改爲具有鍵的json對象稱爲「0」,「1」等,對應於數組元素。這使得無法確定道具是實際上是一個數組還是單個組件。react - 傳入原始js數組作爲道具,但jsx將其修改爲js對象
例如,
MyComponent的有:
propTypes: {
attachedComponents: React.PropTypes.oneOfType([React.PropTypes.array, React.PropTypes.object])
}
實例化MyComponent的,並通過在陣列中:
var foo = <Foo /> // my custom component 1
var bar = <Bar /> // my custom component 2
<MyComponent attachedComponents={[foo, bar]} />
的問題是,內部MyComponent的,this.props.attachedComponents 不是一個真正的JS數組 - 它是某種具有鍵「0」,「1」的JS對象,每個對象響應傳入的數組元素
這nmakes我不可能以編程方式確定它是否是傳遞在單個元件,或者如果它是一個實際的陣列,而不做一些非常糟糕的kludging:
MyComponent的:
getInitialState: function() {
// this cannot work as intended, because the array passed in is converted into a js object whose typeof is object, not array:
if (typeof this.props.attachedComponents !== 'array') {
// do code for single component situation
}
}
我不能檢查Object.keys(this.props.attachedComponents).length
,因爲,通過在一個單一的組件,Object.keys(this.props.attachedComponents)
看起來是這樣的:
["$$typeof", "type", "key", "ref", "props", "_owner"]
現在,如果您想知道爲什麼我要傳遞組件數組,那是因爲我想要編程添加組件;我見過this.props.children
,但這似乎並不可靠可言:
的Facebook表示,
this.props.children
是不透明的,則必須使用 React.Children API調用,所有這些都是干將,這似乎 暗示this.props.children
不應該變異。
關於如何檢測this.props.attachedComponents
是否是一個數組,沒有做一些非常糟糕的kludging任何想法?
感謝
謝謝!我被一些愚蠢的JS事物咬了,我想我也曾經犯過這個錯誤。在JS中記住整個堆棧要記住3-4種語言的奇怪怪癖太多了。順便說一句,我的意思是this.props.children是不可靠的,因爲我不確定我可以適當地改變它,以編程方式添加/刪除組件。這就是爲什麼我手動添加組件作爲一個數組,我作爲道具傳入。這可能更好地問作爲另一個問題(!)謝謝! – dev