2016-05-30 32 views
0

ExtendedComponent<p>タグを追加したい場合は、super.render()を呼び出してください。問題は既に定義済みのjsxオブジェクトを変更できるかどうかわかりません。理想的には、parentTemplate + <p>Some paragraph</p>と書くだけですが、うまくいきません。React JSXオブジェクトをどのように反復するか

class BaseComponent extends React.Component { 
    get title() { 
    return 'I am base component'; 
    } 

    render() { 
    return <h1>Hello {this.title}</h1>; 
    } 
} 

class ExtendedComponent extends BaseComponent { 
    get title() { 
    return 'I am extended component'; 
    } 

    render() { 
    var parentTemplate = super.render(); 
    // append <p>Some paragraph</p> to parentTemplate 
    return parentTemplate; 
    } 
} 

ReactDOM.render(
    <ExtendedComponent />,  
    document.getElementById('test') 
); 
+5

このパターンはなぜ好奇心からですか?なぜ、2つのコンポーネントが他のコンポーネントを 'render'の内部でラップするのではないでしょうか? – azium

+0

私は特に、子コンポーネントのレンダリングと別のメソッドの両方を調整したいときは、私にとってもっと自然な感じです。この場合、いくつかのメソッドを調整するために最初にコンポーネントを拡張し、それをレンダリングメソッドの別のコンポーネントにラップしてhtmlを追加する必要があると感じます。私の方法は、一つの石で2羽の鳥を殺すだろう – klis87

+1

あなたのために働くことができれば、それは良いと思うが、これは非常に頻繁にリアクションコードに表示されません。継承は維持しなければならない苦痛であり、上位コンポーネントのようなものでは、コンポーネントの構成は容易に達成できます。あなたが継承モデルを捨てたいなら、私は喜んで答えを提供します。 – azium

答えて

1

コメントに記載されているアジウムのように、これは反応とは一般的ではありません。あなたがそれを行う必要がある場合は、それがこのように達成することができます。

render() { 
    var parentTemplate = super.render(); 
    // append <p>Some paragraph</p> to parentTemplate 
    return <div>{parentTemplate}<p>Some paragraph</p></div>; 
} 

は、あなただけの1つの要素、それらのないリストを返すことができます反応する要素ので、divの内側にそれをラップする必要があります。 parentTemplateは他のjsxとまったく同じですが、変数に入っています。変数をJSXに追加するには、{variableName}構文を使用します。以上である

これを行うための別の方法として、様の「反応」:

class BaseComponent extends React.Component { 
    render() { 
    return <h1>Hello {this.props.title}</h1>; 
    } 
} 
BaseComponent.propTypes = { 
    title: React.PropTypes.string 
}; 
BaseComponent.defaultProps = { 
    title: 'I am base component' 
}; 

class ExtendedComponent extends React.Component { 
    render() { 
    return (
     <div> 
     <BaseComponent title="I am extended component"/> 
     <p>Some paragraph</p> 
     </div> 
    ); 
    } 
} 

ReactDOM.render(
    <ExtendedComponent />,  
    document.getElementById('test') 
); 

JSFiddle

ここExtendedComponentは、高次の成分ではなく、BaseComponentから継承するものです。ほとんどの場合、これは理由が分かりやすい問題の分離であり、ほとんどの反応アプリは継承よりもこのように構築されています。

希望すると便利です。

関連する問題