JSSスタイルクラスを上書きするのではなく拡張する

シモーネ

私のReactアプリでは、スタイリングにReactJSSを使用しています。これらの2つのファイルがあるとします(インポートと別の興味深いものをスキップします)。

これはApp.jsです:

const styles = {
  root: {
    backgroundColor: '#ffffff',
  },
  header: {
    backgroundColor: '#ff0000',
  }
};

class App extends Component {
  render() {
    const { classes } = this.props;
    return (
        <div className={classes.root}>
          <Header classes={{ root: classes.header }}/>
        </div>
    );
  }
}

export default withStyles(styles)(App);

これはHeader.jsです:

const styles = theme => ({
    root: {
        backgroundColor: '#0000ff',
        padding: '1em',
    },
});

class Header extends Component {
    render() {
        const { classes } = this.props;
        return (
            <header className={classes.root}>
                Hello header
            </header>
        );
    }
}

export default withStyles(styles)(Header);

私が欲しいのは、ヘッダーのルートコンポーネントのスタイルを完全に上書きせずに「オーバーライド」することです。私は2つのことのどちらかを行うことができます:

  1. 使用し<Header className={classes.header}/>た結果で、header要素のクラスを有するApp-root-0-1-2背景がパディングを有する青色であることを意味し、。

  2. <Header classes={{ root: classes.header }}/>(上記のように)を使用するheaderと、クラスを持つ要素が生成されApp-header-0-1-2ます。これは、背景がパディングなしで読み取られることを意味します。

コンポーネントによって定義されたスタイル、または親がそれをオーバーライドするために定義したスタイルのいずれかしか持てないようです。ただし、内部スタイルを親から渡されたスタイルで拡張したいと思います。もちろん、競合では親が優先されます。この場合、パディング付きの赤い背景が必要です。

どうすればそれを達成できますか?それは不可能ですか?編集可能なスタイルをプロパティとして渡す必要がありますか?

ジャンハルトマン

外部クラス名を指定し、クラス名(https://github.com/JedWatson/classnamesを使用して(または単にインライン化して)、このクラス名が存在する場合は条件付きでレンダリングできます。

import classNames from "classnames";

const styles = theme => ({
    root: {
        backgroundColor: '#0000ff',
        padding: '1em',
    },
});

class Header extends Component {
    render() {
        const { classes, className } = this.props;
        return (
            <header 
              className={classNames({ 
                [classes.root]: true, 
                [className]: className 
              })}>
                Hello header
            </header>
        );
    }
}

export default withStyles(styles)(Header);

次にそれを使用します:

<Header className={classes.myParentClass} />

これにより、クラス名が作成されます。 Header-root-0-1-2 App-myParentClass-0-4-3

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

dictを上書きするのではなく、ansibleで拡張する方法は?

分類Dev

cssクラスを別のスタイルで拡張する方法は?

分類Dev

抽象基本クラスを拡張する具象クラスのインスタンスではなく、クラスを返しますか?

分類Dev

typescriptクラス式を上書き/拡張する

分類Dev

「%〜fI」パラメータ拡張が既存のドライブではなく「アクセス」できるのはなぜですか?

分類Dev

ObjC-インスタンスが.mファイルのクラス拡張プロパティにアクセスできるのはなぜですか?

分類Dev

JTextFieldを拡張するクラスがJPasswordFieldをインスタンス化できないのはなぜですか?

分類Dev

JSSを使用してクラスなしで入力タグのスタイルを設定する方法

分類Dev

クラスを作成するときにdocstringを拡張または上書きする

分類Dev

Angularコンポーネント:拡張クラスのインスタンスが上書きされるようです

分類Dev

別のクラスから拡張するクラスのタイプを指定できますか?

分類Dev

すべてのルールをsassで拡張するのではなく、親クラスの特定のルールのみを子クラスに拡張するにはどうすればよいですか?

分類Dev

Javaでインスタンス化できないクラスを拡張する

分類Dev

拡張クラスのインターフェースを拡張する方法

分類Dev

Angular2で拡張クラスインスタンスのライフサイクルを制御するにはどうすればよいですか?

分類Dev

「クラスを拡張する」ための意味のあるテストを書く方法は?

分類Dev

Pythonで既存のクラスインスタンスを拡張する

分類Dev

クラスがSerializableを拡張するときにApacheSparkタスクがSerializableではない

分類Dev

ジェネリッククラスでインターフェイスを拡張するときのNoSuchFieldError

分類Dev

JavaでNumberクラスを拡張し、別のクラスで実行できるように、ジェネリックインターフェイスを正しく制限するにはどうすればよいですか?

分類Dev

Repast:テキストシンクに新しいファイルを自動作成するのではなく、既存のファイルを上書きする方法

分類Dev

カスタム拡張子のテキストファイルを読み書きするにはどうすればよいですか?

分類Dev

同じページ上の複数のReactアプリによる上書きを防ぐために、コンポーネントスタイルをインラインではなくスコープにすることはできますか?

分類Dev

Javaで直接使用できないクラスを拡張可能にする方法は?

分類Dev

クラスとcssモジュールでスタイルを上書きする方法は?

分類Dev

クラス内で発生する静的なネストされたクラスをクラスが拡張できないのはなぜですか?

分類Dev

「type.less」はどこから来たのですか、なぜそれが私のスタイルのいくつかを上書きするのですか?

分類Dev

コンストラクターで独自のスタイルを使用してRadioButtonを拡張する

分類Dev

なぜジェネリッククラスは型の形を拡張できるのですか?

Related 関連記事

  1. 1

    dictを上書きするのではなく、ansibleで拡張する方法は?

  2. 2

    cssクラスを別のスタイルで拡張する方法は?

  3. 3

    抽象基本クラスを拡張する具象クラスのインスタンスではなく、クラスを返しますか?

  4. 4

    typescriptクラス式を上書き/拡張する

  5. 5

    「%〜fI」パラメータ拡張が既存のドライブではなく「アクセス」できるのはなぜですか?

  6. 6

    ObjC-インスタンスが.mファイルのクラス拡張プロパティにアクセスできるのはなぜですか?

  7. 7

    JTextFieldを拡張するクラスがJPasswordFieldをインスタンス化できないのはなぜですか?

  8. 8

    JSSを使用してクラスなしで入力タグのスタイルを設定する方法

  9. 9

    クラスを作成するときにdocstringを拡張または上書きする

  10. 10

    Angularコンポーネント:拡張クラスのインスタンスが上書きされるようです

  11. 11

    別のクラスから拡張するクラスのタイプを指定できますか?

  12. 12

    すべてのルールをsassで拡張するのではなく、親クラスの特定のルールのみを子クラスに拡張するにはどうすればよいですか?

  13. 13

    Javaでインスタンス化できないクラスを拡張する

  14. 14

    拡張クラスのインターフェースを拡張する方法

  15. 15

    Angular2で拡張クラスインスタンスのライフサイクルを制御するにはどうすればよいですか?

  16. 16

    「クラスを拡張する」ための意味のあるテストを書く方法は?

  17. 17

    Pythonで既存のクラスインスタンスを拡張する

  18. 18

    クラスがSerializableを拡張するときにApacheSparkタスクがSerializableではない

  19. 19

    ジェネリッククラスでインターフェイスを拡張するときのNoSuchFieldError

  20. 20

    JavaでNumberクラスを拡張し、別のクラスで実行できるように、ジェネリックインターフェイスを正しく制限するにはどうすればよいですか?

  21. 21

    Repast:テキストシンクに新しいファイルを自動作成するのではなく、既存のファイルを上書きする方法

  22. 22

    カスタム拡張子のテキストファイルを読み書きするにはどうすればよいですか?

  23. 23

    同じページ上の複数のReactアプリによる上書きを防ぐために、コンポーネントスタイルをインラインではなくスコープにすることはできますか?

  24. 24

    Javaで直接使用できないクラスを拡張可能にする方法は?

  25. 25

    クラスとcssモジュールでスタイルを上書きする方法は?

  26. 26

    クラス内で発生する静的なネストされたクラスをクラスが拡張できないのはなぜですか?

  27. 27

    「type.less」はどこから来たのですか、なぜそれが私のスタイルのいくつかを上書きするのですか?

  28. 28

    コンストラクターで独自のスタイルを使用してRadioButtonを拡張する

  29. 29

    なぜジェネリッククラスは型の形を拡張できるのですか?

ホットタグ

アーカイブ