可以说我有:
import Statement from './Statement';
import SchoolDetails from './SchoolDetails';
import AuthorizedStaff from './AuthorizedStaff';
const MultiTab = () => (
<Tabs initialIndex={1} justify="start" className="tablisty">
<Tab title="First Title" className="home">
<Statement />
</Tab>
<Tab title="Second Title" className="check">
<SchoolDetails />
</Tab>
<Tab title="Third Title" className="staff">
<AuthorizedStaff />
</Tab>
</Tabs>
);
在 Tabs 组件中, this.props
具有属性
+Children[3]
className="tablist"
justify="start"
Children[0] (this.props.children) 看起来像
$$typeof:
Symbol(react.element)
_owner:ReactCompositeComponentWrapper
_self:null
_shadowChildren:Object
_source:null
_store:Object
key:null
props:Object
ref:null
type: Tab(props, context)
__proto__
Object
Children[0].props 看起来像
+Children (one element)
className="home"
title="first title"
最后 Children 对象看起来像(这是我想要传递的):
$$typeof:Symbol(react.element)
_owner:ReactCompositeComponentWrapper
_self:null
_shadowChildren:undefined
_source:null
_store:
key:null
props:Object
__proto__:Object
**type: function Statement()**
ref:null
问题是这样的,如果我这样重写 MultiTab
<Tabs initialIndex={1} justify="start" className="tablisty">
<Tab title="First Title" className="home" pass={Statement} />
<Tab title="Second Title" className="check" pass={SchoolDetails} />
<Tab title="Third Title" className="staff" pass={AuthorizedStaff} />
</Tabs>;
选项卡组件内部
this.props.children
看起来和上面一样。
children[0].props
看起来像
classname:"home"
**pass: function Statement()**
title: "First title"
我希望 pass
属性看起来像。上面只是打印出 Statement 函数。
$$typeof:Symbol(react.element)
_owner:ReactCompositeComponentWrapper
_self:null
_shadowChildren:undefined
_source:null
_store:
key:null
props:Object
__proto__:Object
**type: function Statement()**
ref:null
这是一个奇怪的问题,但长篇大论我正在使用图书馆,这就是它的归结。
原文由 chefcurry7 发布,翻译遵循 CC BY-SA 4.0 许可协议
使用
this.props.children
是将实例化组件传递给反应组件的惯用方式当您直接将组件作为参数传递时,您会未实例化地传递它并通过从道具中检索它来实例化它。这是传递组件类的惯用方式,然后将由组件沿树向下实例化(例如,如果组件在标签上使用自定义样式,但它想让消费者选择该标签是
div
还是span
) :如果您想要做的是传递一个类似儿童的参数作为道具,您可以这样做:
毕竟,React 中的属性只是常规的 JavaScript 对象属性,可以保存任何值——无论是字符串、函数还是复杂对象。