2016-12-01 18 views
0

私は、このコンポーネントを特定のページに置くのを別にしています。しかし、別のclassNameプロパティを提供すると、コンポーネントを宣言するときに提供された元のクラスのスタイリングだけが使用されます。拡張コンポーネントのclassNameをオーバーライドする方法は?

コンポーネント:

import React, { Component } from 'react'; 
import styles from './label.css'; 

class Label extends Component { 
    render() { 
    return (
     <div className={styles.labelClass} /> 
    ); 
    } 
} 

export default Label; 

ページ私は違っそれを配置したい:私はこのISN」ので、メディアに クエリを使用する必要がなく、

import React, { Component } from 'react'; 
import styles from './page.css'; 
import Label from '../common/label.jsx'; 

class Page extends Component { 

    render() { 
    return (
     <div> 
      <Label className={styles.positionLeft} /> 
     </div> 
    ); 
    } 

} 

export default Page; 

は、通常、私は、カスタムスタイリングでこれを行うだろうこの状況では可能です。

答えて

1

私はコンポーネントに別のオプションのプロパティcustomClassを追加することによって、それを修正。

ラベル

import React, { Component } from 'react'; 
import styles from './label.css'; 

class Label extends Component { 
    render() { 
    return (
     <div className={styles.labelClass + ' ' + this.props.customClass} /> 
    ); 
    } 
} 

export default Label; 

ページ

import React, { Component } from 'react'; 
import styles from './page.css'; 
import Label from '../common/label.jsx'; 

class Page extends Component { 

    render() { 
    return (
     <div> 
      <Label customClass={styles.positionLeft} /> 
     </div> 
    ); 
    } 

} 

export default Page; 
2

<Label>はカスタムコンポーネントですので、classNameプロップを手動で渡すことができます。

これは、default propsの場合に適しています。何classNameLabelに提供されていない場合

class Label extends Component { 
    render() { 
    return (
     <div className={this.props.className} /> 
    ); 
    } 
} 

Label.defaultProps = { 
    className: styles.labelClass 
} 

そのように、それはそうでない場合、それは小道具を使用しますが、labelClassスタイルを使用します。

+0

または使用[クラス名](http://stackoverflow.com/questions/34521797/how-to-add-multiple-classes -to-a-reactjs-component)を使用して複数のクラスを適用します。 –

+0

それは可能性があります、ポストは、連結よりも置き換えのように聞こえるようにしました。 –

1

明示的Labelの小道具からclassNameプロパティを参照する必要があります - 試してみてください。

import React, { Component } from 'react'; 
import styles from './label.css'; 

class Label extends Component { 
    render() { 

    let { className } = this.props 

    if (!className) { 
     className = styles.labelClass 
    } 

    return (
     <div className={className} /> 
    ); 
    } 
} 

export default Label; 
+0

有効な答えですが、基本的にdefaultPropsの手動実装を作成しました。 –

+0

私は私の書くことを終えた後、あなたの答えを見ました - 確かに私は持っている!あなたは毎日何か新しいことを学びます... \ *リファクタリングコードベースに行く\ * –

+0

私は正しいことを知っています。私が自分の「Promise.all」に相当するものを書いたとき、私は覚えています。 –

関連する問題