it-swarm.dev

Sınıf Ups 'u kullanarak Material UI' da çoklu sınıf nasıl eklenir

Bir reaksiyon bileşenine sınıflar eklemek için css-in-js yöntemini kullanarak birden fazla bileşeni nasıl eklerim?

İşte sınıf değişkeni:

const styles = theme => ({
 container: {
  display: 'flex',
  flexWrap: 'wrap'
},
 spacious: {
  padding: 10
},
});

İşte nasıl kullandım:

    return (
     <div className={ this.props.classes.container }>

Yukarıdakiler işe yarar, ancak classNames npm paketini kullanmadan her iki sınıfı da eklemenin bir yolu var mı? Gibi bir şey:

     <div className={ this.props.classes.container + this.props.classes.spacious}>
42
fatahn

string enterpolasyonunu kullanabilirsiniz:

<div className={`${this.props.classes.container} ${this.props.classes.spacious}`}>
73
klugjo

bu paketi kurabilirsin

https://github.com/JedWatson/classnames

ve sonra bu şekilde kullanın

classNames('foo', 'bar'); // => 'foo bar'
classNames('foo', { bar: true }); // => 'foo bar'
classNames({ 'foo-bar': true }); // => 'foo-bar'
classNames({ 'foo-bar': false }); // => ''
classNames({ foo: true }, { bar: true }); // => 'foo bar'
classNames({ foo: true, bar: true }); // => 'foo bar'

// lots of arguments of various types
classNames('foo', { bar: true, duck: false }, 'baz', { quux: true }); // => 'foo bar baz quux'

// other falsy values are just ignored
classNames(null, false, 'bar', undefined, 0, 1, { baz: null }, ''); // => 'bar 1'
35
Mini

Bir bileşene birden fazla sınıfın uygulanması için, uygulamak istediğiniz sınıfları classNames içinde kaydırın.

Örneğin, sizin durumunuzda, kodunuz şöyle görünmelidir,

import classNames from 'classnames';

const styles = theme => ({
  container: {
    display: "flex",
    flexWrap: "wrap"
  },
  spacious: {
    padding: 10
  }
});

<div className={classNames(classes.container, classes.spacious)} />

ClassNames'i aldığınızdan emin olun !!!

Özel bir düğme oluşturmak için bir bileşendeki birden fazla sınıfı kullandıkları malzeme arayüzü belgeleri 'e bakın.

11
will92

Extend özelliğini de kullanabilirsiniz ( jss-extend plugin varsayılan olarak etkindir):

const styles = theme => ({
  container: {
    display: 'flex',
    flexWrap: 'wrap'
  },
  spaciousContainer: {
    extend: 'container',
    padding: 10
  },
});

// ...
<div className={ this.props.classes.spaciousContainer }>
7
VaclavSir

Evet, jss-composes size şunları sağlar:

const styles = theme => ({
 container: {
  display: 'flex',
  flexWrap: 'wrap'
},
 spacious: {
  composes: '$container',
  padding: 10
},
});

Ve sonra sadece sınıfları kullanırsın.

5
Oleg Isonen

Bunun probleminizi çözeceğini düşünüyorum:

const styles = theme => ({
 container: {
  display: 'flex',
  flexWrap: 'wrap'
},
 spacious: {
  padding: 10
},
});

ve reaksiyon bileşeninde:

<div className={`${classes.container} ${classes.spacious}`}>
5
Kalim M Vazir

Kullanabilirsiniz clsx . MUI düğmeleri örneklerinde kullanıldığını fark ettim

İlk önce kurun:

npm install --save clsx

Sonra onu bileşen dosyanıza aktarın:

import clsx from 'clsx';

Ardından, bileşeninizde içe aktarılan işlevi kullanın:

<div className={ clsx(classes.container, classes.spacious)}>

1
Razzlero

birden çok sınıf atamak öğenize adlarını istiyorsanız, [dizileri kullanın kullanabilirsiniz.

Yani yukarıdaki kodunuzda, eğer this.props.classes ['container', 'ferah'] gibi bir şeye çözülürse, yani

this.props.classes = ['container', 'spacious'];

sadece div olarak atayabilirsiniz

<div className = { this.props.classes.join(' ') }></div>

ve sonuç olacak

<div class='container spacious'></div>
0
Praym