如何知道子组件的类型
在日常开发中,我们可能会遇到像 select 组件和 RadioGroup 组件的情况:
Select 组件
<Select defaultValue="lucy" style={{ width: 120 }} onChange={handleChange}>
<Option value="jack">Jack</Option>
<Option value="lucy">Lucy</Option>
<Option value="disabled" disabled>
Disabled
</Option>
<Option value="Yiminghe">yiminghe</Option>
</Select>
Radio 组件
<Radio.Group onChange={this.onChange} value={this.state.value}>
<Radio style={radioStyle} value={1}>
Option A
</Radio>
<Radio style={radioStyle} value={2}>
Option B
</Radio>
</Radio.Group>
对于这种情况,Select 作为父组件,需要知道子组件的类型,它是不是 Option 组件,例如,我们只会对 Option 子组件添加特殊属性,如果是其它类型子组件则不作处理:
于是我们可以这样:
// B 组件
function B () {
return <div>
B
</div>
}
class A extends React.Component {
render () {
// 在这里判断 type 是不是 B
// 2020-03-28 新增, 有时候不能通过 type 直接判断时
// 可以通过 children.type.name === 'B' 来判断
console.log(this.props.children.type === B)
return <div>
{this.props.children}
</div>
}
}
function App () {
return <div>
<A>
<B />
</A>
</div>
}
注意: 如果 this.props.children 是数组,则需要使用循环:
class A extends React.Component {
render () {
console.log(this.props.children.map(ele => {
return ele.type === B
}))
return <div>
{this.props.children}
</div>
}
}
同时,使用 type 这种方法,不仅可以用于函数式组件,对于 Class 组件也同样有效:
class B extends React.Component {
render () {
return <div>
B
</div>
}
}
Last updated
Was this helpful?