2016-08-29 15 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

タブリンクを拡張することを意味しましたか? React.Componentを継承しているので、今はちょうど兄弟です。 – Jecoms

+0

@Jecomsお待ちください、私はタブを拡張する必要がありますか?それはどのように機能しますか? React.Componentを拡張する必要はありませんか? –

+0

私はあなたの意図を誤解しました。私はx.typeが問題だと思っていますが、私はさらに研究しなければなりません。 – Jecoms

答えて

2

あなたはあなたが明示的にこのケースでのdisplayNameを定義する必要はありません

console.log(x.type.name) // this would be 'TabLink' 

を使用することができます別の方法として。

https://jsfiddle.net/lustoykov/u1twznw7/1/

3

staticである必要がありますので、undefinedです。

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

jsfiddle(コンソールを確認してください)

関連する問題