2016-08-29 70 views
2

我想讓自己的Tabs組件,以便我可以在我的應用程序中使用選項卡。不過,我似乎有問題試圖提取我需要按類型的子組件。如何讓兒童輸入反應

import React from 'react' 

export class Tabs extends React.Component { 
    render() { 
    let children = this.props.children 
    let tablinks = React.Children.map(children, x => { 
     console.log(x.type.displayName) // Always undefined 
     if (x.type.displayName == 'Tab Link') { 
     return x 
     } 
    }) 

    return (
     <div className="tabs"></div> 
    ) 
    } 
} 

export class TabLink extends React.Component { 
    constructor(props) { 
    super(props) 
    this.displayName = 'Tab Link' 
    } 
    render() { 
    return (
     <div className="tab-link"></div> 
    ) 
    } 
} 

<Tabs> 
    <TabLink path="tab1">Test</TabLink> 
    <TabLink path="tab2">Test2</TabLink> 
</Tabs> 

console.log永遠不會返回 「的選項卡鏈接」,它總是返回undefined,爲什麼呢?

+0

您是不是要讓TabLink擴展Tabs?現在它只是一個兄弟姐妹,因爲它擴展了React.Component。 – Jecoms

+0

@Jecoms等等,我必須擴展Tabs?這將如何工作?是否需要擴展React.Component才能工作? –

+0

我誤解了你的意圖。我覺得x.type是問題,但我必須進一步研究。 – Jecoms

回答

3

這是undefined,因爲displayName應該是static屬性。

class TabLink extends React.Component { 
    constructor(props) { 
    super(props) 
    } 
    render() { 
    return (
     <div className="tab-link"></div> 
    ) 
    } 
} 
TabLink.displayName = 'Tab Link' 

jsfiddle(檢查控制檯)