Material-ui: рд╕рдорд░реНрдерди рдЬреЗрдПрд╕рдПрд╕ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рдкреНрд▓рдЧрдЗрди рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░реЗрдВ

рдХреЛ рдирд┐рд░реНрдорд┐рдд 30 рдирд╡ре░ 2017  ┬╖  57рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: mui-org/material-ui

рдЕрдкреЗрдХреНрд╖рд┐рддреН рд╡реНрдпрд╡рд╣рд╛рд░

  • рдЯреЗрдХреНрд╕реНрдЯ рдХрд╛ рд░рдВрдЧ: #FF0000
.App-text-273 {
    color: #FF0000; // <--- Expected
    cursor: pointer;
    font-size: 50px;
    user-select: none;
}

рд╡рд░реНрддрдорд╛рди рд╡реНрдпрд╡рд╣рд╛рд░

.App-text-273 {
    extend: ext; // <--- Invalid
    cursor: pointer;
    font-size: 50px;
    user-select: none;
}

рдкреБрдирд░реБрддреНрдкрд╛рджрди рдХреЗ рд▓рд┐рдП рдХрджрдо (рдмрдЧ рдХреЗ рд▓рд┐рдП)

import React, { Component } from 'react'
import ReactDOM, { render } from 'react-dom'
import PropTypes from 'prop-types'
import { withStyles } from 'material-ui/styles'

const styles = theme => ({
  ext: {
    color: '#FF0000',
  },
  text: {
    extend: 'ext',
    fontSize: '50px',
    cursor: 'pointer',
    userSelect: 'none'
  }
})

@withStyles(styles)
class App extends Component {
  static propTypes = {
    classes: PropTypes.object.isRequired
  }

  onClick(event) {
    const className = event.target.getAttribute('class')
    const style = getComputedStyle(event.target, null)
    const { fontSize, cursor, userSelect, color } = style

    console.log(`className: ${className}`)
    console.log({ fontSize, cursor, userSelect, color })
  }

  render() {
    const { classes } = this.props
    return (
      <p className={classes.text} onClick={this.onClick}>Foo Bar Baz</p>
    )
  }
}

render(<App />, document.getElementById('root'))

Edit 88ywmypq7l

рд╡рд╛рддрд╛рд╡рд░рдг

| рдЯреЗрдХ | рд╕рдВрд╕реНрдХрд░рдг |
|--------------|------------|
| рд╕рд╛рдордЧреНрд░реА-рдпреВрдЖрдИ | 1.0.0-рдмреАрдЯрд╛.22 |
| рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ | 16.0.0 |
| рдмреНрд░рд╛рдЙрдЬрд╝рд░ | рдХреНрд░реЛрдо рд╕рдВрд╕реНрдХрд░рдг 62.0.3202.94 (рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рдмрд┐рд▓реНрдб) (64-рдмрд┐рдЯ) |

рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА

:+1: рдЙрди рджреЛрдиреЛрдВ рдХреЛ рджреЛрдмрд╛рд░рд╛ рдЬреЛрдбрд╝рдиреЗ рдкрд░ (рд╡рд┐рд╕реНрддрд╛рд░ рдФрд░ рд▓рд┐рдЦреЗрдВ)ред рд╡реЗ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдХреЗрд╡рд▓ 2KB IMO рдХреЗ рд▓рд┐рдП рдЗрд╕рдХреЗ рд▓рд╛рдпрдХ рд╣реИрдВред

рд╕рднреА 57 рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

@tdkn рдХреНрдпрд╛ рдЖрдк jss-рд╡рд┐рд╕реНрддрд╛рд░ рдкреНрд▓рдЧрдЗрди рд▓реЛрдб рдХрд░ рд░рд╣реЗ рд╣реИрдВ? https://github.com/cssinjs/react-jss#custom -setup

@mbrookes
рдзрдиреНрдпрд╡рд╛рдж
рдореИрдВрдиреЗ рдЗрд╕реЗ рдиреАрдЪреЗ рдХреА рддрд░рд╣ рддрдп рдХрд┐рдпрд╛ред
рд▓реЗрдХрд┐рди, рдпрд╣ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рдкреНрд░рд▓реЗрдЦрд┐рдд рд╣реИ? :рдирд┐рд░рд╛рд╢:

import React, { Component } from 'react'
import ReactDOM, { render } from 'react-dom'
import PropTypes from 'prop-types'
import { JssProvider, SheetsRegistry, jss } from 'react-jss'
import { withStyles } from 'material-ui/styles'

const withJSSProvider = Component => props => (
  <JssProvider registry={new SheetsRegistry()} jss={jss}>
    <Component {...props} />
  </JssProvider>
)

const styles = theme => ({
  ext: {
    color: '#FF0000',
  },
  text: {
    extend: 'ext',
    fontSize: '50px',
    cursor: 'pointer',
    userSelect: 'none'
  }
})

<strong i="10">@withJSSProvider</strong>
@withStyles(styles)
class App extends Component {
  static propTypes = {
    classes: PropTypes.object.isRequired
  }

  onClick(event) {
    const className = event.target.getAttribute('class')
    const style = getComputedStyle(event.target, null)
    const { fontSize, cursor, userSelect, color } = style

    console.log(`className: ${className}`)
    console.log({ fontSize, cursor, userSelect, color })
  }

  render() {
    const { classes } = this.props
    return (
      <p className={classes.text} onClick={this.onClick}>Foo Bar Baz</p>
    )
  }
}

render(<App />, document.getElementById('root'))

Edit 8n5lkpmm8l

рд▓реЗрдХрд┐рди рдЬреЗрдПрд╕рдПрд╕-рд╡рд┐рд╕реНрддрд╛рд░ рдЬреЗрдПрд╕рдПрд╕-рдкреНрд░реАрд╕реЗрдЯ-рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рдирд╣реАрдВ рд╣реИ?
https://material-ui-next.com/customization/css-in-js/#jss
https://github.com/cssinjs/jss-preset-default/blob/master/package.json#L50

@giapelle рдЕрдЪреНрдЫрд╛ рдмрд┐рдВрджреБред @рдХреЛрдл?

@tdkn рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред рдореИрдВ рдЪреЗрдВрдЬрд▓реЙрдЧ рдХреЗ рдмреНрд░реЗрдХрд┐рдВрдЧ рдЪреЗрдВрдЬ рдкрд╛рд░реНрдЯ рдореЗрдВ рдмрджрд▓рд╛рд╡ рдЬреЛрдбрд╝ рд░рд╣рд╛ рд╣реВрдВред

рд╣рдореЗрдВ рдпрд╣ рдЙрд▓реНрд▓реЗрдЦ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдХрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдПрдХ JSS рдЙрджрд╛рд╣рд░рдг рдХреЛ рдХрдИ рд╕реНрдерд╛рдиреЛрдВ рдкрд░ рдХреИрд╕реЗ рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕ рдЕрдиреБрдХреВрд▓рди рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ, рд╣рдордиреЗ рдХрдИ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ рдЗрд╕рдореЗрдВ рдФрд░ рдЗрд╕реА рддрд░рд╣ рдХреЗ рдореБрджреНрджреЛрдВ (рдЕрднреА рднреА рдЖрд╢реНрд╡рд╕реНрдд рдирд╣реАрдВ рд╣реИ рдХрд┐ рдпрд╣ рдЗрд╕рдХреЗ рд▓рд╛рдпрдХ рдерд╛) рдореЗрдВ рдЪрд▓рд╛ рдЧрдпрд╛ред

@kof рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЖрдк рд╕рд╣реА рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ: #9335

@kof рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╣рдореЗрдВ рдЗрд╕реЗ рдПрдХ рдкреНрд░рдпреЛрдЧ рдХреЗ рд░реВрдк рдореЗрдВ рджреЗрдЦрдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИред рдореЗрд░реА рд░рдгрдиреАрддрд┐ рдЗрдВрддрдЬрд╛рд░ рдХрд░рдиреЗ рдФрд░ рджреЗрдЦрдиреЗ рдХреА рдереАред рдЕрдЧрд░ рд▓реЛрдЧ рд╢рд┐рдХрд╛рдпрдд рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рд╣рдо рдЙрдирдХреЗ рджреНрд╡рд╛рд░рд╛ рдЫреВрдЯреЗ рд╣реБрдП рдкреНрд▓рдЧрдЗрдиреНрд╕ рдХреЛ рдЬреЛрдбрд╝ рджреЗрддреЗ рд╣реИрдВред

рдореЗрд░реЗ рд▓рд┐рдП, рдпрд╣ рд╕рдм рдХрдВрдкреЛрдЬрд╝ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╣реИ

@kof рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╣рдореЗрдВ рдЗрд╕реЗ рдПрдХ рдкреНрд░рдпреЛрдЧ рдХреЗ рд░реВрдк рдореЗрдВ рджреЗрдЦрдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИред рдореЗрд░реА рд░рдгрдиреАрддрд┐ рдЗрдВрддрдЬрд╛рд░ рдХрд░рдиреЗ рдФрд░ рджреЗрдЦрдиреЗ рдХреА рдереАред рдЕрдЧрд░ рд▓реЛрдЧ рд╢рд┐рдХрд╛рдпрдд рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рд╣рдо рдЙрдирдХреЗ рджреНрд╡рд╛рд░рд╛ рдЫреВрдЯреЗ рд╣реБрдП рдкреНрд▓рдЧрдЗрдиреНрд╕ рдХреЛ рдЬреЛрдбрд╝ рджреЗрддреЗ рд╣реИрдВред

рдпрд╣ рдореВрд▓ рд░реВрдк рд╕реЗ рдкрд╣рд▓реЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░рдиреЗ рдЬреИрд╕рд╛ рд╣реИ рдЬреЛ рдПрдХ рдкреНрд▓рдЧрдЗрди рдХреА рдЕрдиреБрдкрд╕реНрдерд┐рддрд┐ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╢рд┐рдХрд╛рдпрдд рдХрд░рддрд╛ рд╣реИ рдЬрд┐рд╕рдХрд╛ рд╡рд╣ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реИ, рдЖрдк рдЗрд╕ рдкреНрд░рдпреЛрдЧ рдХреЛ рдХрднреА рднреА рд╕рдорд╛рдкреНрдд рдирд╣реАрдВ рдХрд░реЗрдВрдЧреЗ рд╣рд╛рд╣рд╛

"рд▓рд┐рдЦрддрд╛ рд╣реИ" рд╕рд╛рдЭрд╛-рд╕реНрдЯрд╛рдЗрд▓рд╢реАрдЯ-рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрдЪреНрдЫрд╛ рд╕рдорд╛рдзрд╛рди рдХреА рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ"

рджреЛрд╣! @oallouch рд╡рд╣реА: рдореБрдЭреЗ рдпрдХреАрди рдерд╛ рдХрд┐ рдореБрдИ jss-preset-default рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рдерд╛ рд▓реЗрдХрд┐рди рдлрд┐рд░ рдореИрдВ рдЗрд╕рдореЗрдВ рдареЛрдХрд░ рдЦрд╛рдИред
рдореИрдВ compose рдпрд╛ extend рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░ рд░рд╣рд╛ рдерд╛ред
@olegberman рдХреНрдпрд╛ рдпрд╣ рд╣рдЯрд╛рдиреЗ рд▓рд╛рдпрдХ рдерд╛ рдЕрдЧрд░ 2kb gzipped рдХреЗ рдмрд╛рдж рднреА? рдореИрдВ

@oliviertassinari рдиреЗ рдХрд╣рд╛

рд╣рдордиреЗ рдЗрд╕ рдкрд░рд┐рд╡рд░реНрддрди рдХреЛ рджрд░реНрд╢рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реАрдХрд░рдг рдХреЛ рдЕрджреНрдпрддрди рдХрд┐рдпрд╛ рд╣реИред

рдореИрдВ рдПрдХ рд╣реА рдореБрджреНрджреЗ рдореЗрдВ рднрд╛рдЧ рдЧрдпрд╛, рд╡рд┐рд╕реНрддрд╛рд░ рдкреНрд▓рдЧрдЗрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣рд╛ рдерд╛ред
рдореИрдВрдиреЗ рдЗрд╕рдХрд╛ рдЕрдиреБрд╕рд░рдг рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА: https://material-ui-next.com/guides/right-to-left/#3 -jss-rtl
рд▓реЗрдХрд┐рди рдореИрдВ рд╕рд░реНрд╡рд░ рд╕рд╛рдЗрдб рд░реЗрдВрдбрд░рд┐рдВрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рдФрд░ рдореИрдВ рдЗрд╕реЗ рдХрд╛рдо рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдирд╣реАрдВ рдерд╛ред

рдкреБрдирд╢реНрдЪ: рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдирд╣реАрдВ рд╣реИ рдХрд┐ рдЗрди рдкреНрд▓рдЧрдЗрдиреНрд╕ рдХреЛ 2kb рдХреЗ рд▓рд┐рдП рд╣рдЯрд╛рдиреЗ рдХреЗ рд▓рд╛рдпрдХ рдерд╛ рдХреНрдпреЛрдВрдХрд┐ рдпреЗ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдмрд╣реБрдд рдмрдврд╝рд┐рдпрд╛ рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдВ рд╣реИрдВ рдЬрд┐рдирдХрд╛ рдЙрдкрдпреЛрдЧ рд╣рд░ рдХрд┐рд╕реА рдХреЛ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП

рдореИрдВ рджреВрд╕рд░рд╛, рд╡рд┐рд╕реНрддрд╛рд░ рдФрд░ рд░рдЪрдирд╛ JSS рдореЗрдВ IMHO рдЖрд╡рд╢реНрдпрдХ рдЙрдкрдХрд░рдг рд╣реИрдВ рдФрд░ 2kb рдХреЗ рд▓рд╛рдпрдХ рдирд╣реАрдВ рд╣реИрдВред

рд░реЗрдВрдбрд░рд┐рдВрдЧ рд░рдирдЯрд╛рдЗрдо рдУрд╡рд░рд╣реЗрдб рдХреЛ рдкрд░рд┐рдорд╛рдгрд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдпрд╣ рдХреЗрд╡рд▓ рдмрдВрдбрд▓ рдЖрдХрд╛рд░ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдирд╣реАрдВ рд╣реИред

рдпрд╣ рдЕрднреА рднреА рдореБрдИ рдХреЗ рд▓рд┐рдП рд╡реИрдХрд▓реНрдкрд┐рдХ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдпрджрд┐ рдЖрдк рдкрд╛рддреЗ рд╣реИрдВ рдХрд┐ рдпрд╣ рдУрд╡рд░рд╣реЗрдб рдмрдврд╝рд╛рддрд╛ рд╣реИ, рддреЛ рдЖрдк рдХреНрд▓рд╛рд╕рдирд╛рдо рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдФрд░ рд╕реНрдкреНрд░реЗрдб рдСрдкрд░реЗрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЬрд╛рд░реА рд░рдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕рд╕реЗ рдХреЛрдИ рдлрд░реНрдХ рдирд╣реАрдВ рдкрдбрд╝реЗрдЧрд╛ред

рдореИрдВ рдЬреЗрдПрд╕-рд╡рд┐рд╕реНрддрд╛рд░ рдкреНрд▓рдЧрдЗрди рдХреЛ рд╕рдХреНрд╖рдо рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣рд╛ рдерд╛ рдЬрд┐рд╕ рддрд░рд╣ рд╕реЗ рдЬреЗрдПрд╕-рдЖрд░рдЯреАрдПрд▓ рдкреНрд▓рдЧрдЗрди рдХреЛ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реЛрдВ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рд╕рдХреНрд╖рдо рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рд╡рд╣реА рдХреЛрдб, рд▓реЗрдХрд┐рди рдореИрдВрдиреЗ рд╕рднреА рдкреНрд▓рдЧрдЗрди-рд╕рдВрдмрдВрдзрд┐рдд рдХреЙрд▓ рдХреЛ jss-exend one рдореЗрдВ рдмрджрд▓ рджрд┐рдпрд╛ рд╣реИред рд▓реЗрдХрд┐рди рд╕рдлрд▓рддрд╛ рдХреЗ рдмрд┐рдирд╛ред рдЬрд┐рди рдирд┐рдпрдореЛрдВ рдХреЛ рдмрдврд╝рд╛рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рд╡реЗ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдкреНрд░рднрд╛рд╡рд┐рдд рдирд╣реАрдВ рд╣реЛрддреЗ рд╣реИрдВред рдХреНрдпрд╛ рдХреЛрдИ рдЗрд╕реЗ рдЕрдВрддрддрдГ рдмрдирд╛ рд╕рдХрддрд╛ рдерд╛?

рдзрд┐рдХреНрдХрд╛рд░ рд╣реИ, рдЖрдзрд╛ рдЖрдЦрд┐рд░реА рджрд┐рди рд╕рд╛рдордЧреНрд░реА-рдпреВрдЖрдИ рдореЗрдВ рдЬреЗрдПрд╕рдПрд╕-рд╡рд┐рд╕реНрддрд╛рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рддрд░реАрдХреЗ рдкрд░ рдмрд┐рддрд╛рдпрд╛ рдЧрдпрд╛, рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд╕рд╛рде рдХрд╣реАрдВ рдорд┐рд▓рд╛:
cssLabel: { "&$cssFocused": { color: grey[500] } }, cssFocused: { backgroundColor: blue[500] },
рдЬрд╣рд╛рдВ рдореИрдВ рд╣рд╛рд▓рд╛рдВрдХрд┐ "&$cssFocused рд╡рд┐рд╕реНрддрд╛рд░ рдХреА рддрд░рд╣ рд╣реЛрдЧрд╛: cssFocused. рд▓реЗрдХрд┐рди рдРрд╕рд╛ рдирд╣реАрдВ рд╣реИред рддреЛ рдЗрд╕реЗ рдХреИрд╕реЗ рдХрд░реЗрдВ?

@nsaubi рдЖрдк рдиреЗрд╕реНрдЯрд┐рдВрдЧ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рдФрд░ рдпреБрдХреНрдд рдирд┐рдпрдо рдЪрдпрдирдХрд░реНрддрд╛ рджреНрд╡рд╛рд░рд╛ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЬреИрд╕реЗ sass рдореЗрдВред

рдЕрдЧрд░ рднрд╡рд┐рд╖реНрдп рдореЗрдВ рдЬреЗрдПрд╕рдПрд╕-рд╡рд┐рд╕реНрддрд╛рд░/рд▓рд┐рдЦреЗрдВ рдорд╛рдирдХ рдмрди рдЬрд╛рдПрдВрдЧреЗ рддреЛ рдХреЛрдИ рдЬрд╛рдирдХрд╛рд░реА?

рдореБрдЭреЗ рдЖрд╢рд╛ рд╣реИ рдХрд┐ рд╡рд┐рд╕реНрддрд╛рд░ рдЗрд╕реЗ рд╡рд╛рдкрд╕ рдХрд░ рджреЗрдЧрд╛ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдЬреЗрдПрд╕рдПрд╕ рдХреЛрдб рдХреЛ рдХреНрд▓реАрдирд░ рдЖрдИрдПрдордУ рдмрдирд╛рдиреЗ рдореЗрдВ рдорджрдж рдХрд░рддрд╛ рд╣реИред

++ (1 )

2kb рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдорд╛рдпрдиреЗ рдирд╣реАрдВ рд░рдЦрддрд╛ред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ "рд╡рд┐рд╕реНрддрд╛рд░ рдФрд░ рд░рдЪрдирд╛" рдХреЗ рд╕рд╛рде рдПрдХ рдЕрдЪреНрдЫрд╛ рдХреЛрдбрд┐рдВрдЧ рдкреИрдЯрд░реНрди рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдирд╛ рднрд╡рд┐рд╖реНрдп рдХреЗ рд▓рд┐рдП рдЕрдзрд┐рдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИред
@oliviertassinari рдХреНрдпрд╛ рдЖрдк рдХреГрдкрдпрд╛ рдЙрдиреНрд╣реЗрдВ рд╡рд╛рдкрд╕ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдореВрд▓реНрдпрд╛рдВрдХрди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдЙрдирдХреЗ рд▓рд┐рдП рдкреВрд░реНрдг рд╕рдорд░реНрдерди рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП?

@gitsupersmecher JssProvider рдШрдЯрдХ рдХреЗ рд╕рд╛рде JSS рдореЗрдВ рдкреНрд▓рдЧрдЗрди рдЬреЛрдбрд╝рдХрд░ рдЖрдк рдкрд╣рд▓реЗ рд╕реЗ рд╣реА "рд╡рд┐рд╕реНрддрд╛рд░ рдФрд░ рд░рдЪрдирд╛" рдХреЗ рд▓рд┐рдП рдкреВрд░реНрдг рд╕рдорд░реНрдерди рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЕрдзрд┐рдХрд╛рдВрд╢ рд▓реЛрдЧ рдмрд┐рдирд╛ рд╕рд╛рде рдорд┐рд▓ рд╕рдХрддреЗ рд╣реИрдВред +2kb рдмрдВрдбрд▓ рд╡реГрджреНрдзрд┐ рдЗрд╕ рдореБрджреНрджреЗ рдХрд╛ рдПрдХ рдкрдХреНрд╖ рд╣реИ, рд░рдирдЯрд╛рдЗрдо рд▓рд╛рдЧрдд рджреВрд╕рд░рд╛ рд╣реИред

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд░рдирдЯрд╛рдЗрдо рд▓рд╛рдЧрдд рдЙрди 2 рдХреЗ рд▓рд┐рдП рд▓рдЧрднрдЧ рдзреНрдпрд╛рди рджреЗрдиреЗ рдпреЛрдЧреНрдп рдирд╣реАрдВ рд╣реИред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕рдХреЗ рд▓рд┐рдП рдХреБрдЫ рдХреЗрдмреА рдЬреЛрдбрд╝рдиреЗ рд▓рд╛рдпрдХ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рд╣рдордиреЗ рд╕реНрдЯрд╛рдЗрд▓ рдХреЛ рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдПрдкреАрдЖрдИ рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рдмрдирд╛рдпрд╛ рд╣реИ рдФрд░ рд╡реЗ рдмрд╣реБрдд рд▓реЛрдХрдкреНрд░рд┐рдп рдЪреАрдЬреЗрдВ рд╣реИрдВред

рд╣рд╛рд▓рд╛рдВрдХрд┐, рд╡рд┐рд╕реНрддрд╛рд░ рдХреЗ рдмрдЬрд╛рдп, рдХреЛрдИ рд╕реНрдкреНрд░реЗрдб рдСрдкрд░реЗрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рдЬреЛ рдЬреНрдпрд╛рджрд╛рддрд░ рдорд╛рдорд▓реЛрдВ рдХреЛ рдХрд╡рд░ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдПрдХ рд╡рд░реНрдЧрдирд╛рдо рдХреЛ рдЬреЛрдбрд╝рдХрд░ рдПрдХ рдШрдЯрдХ рдХреЗ рдЕрдВрджрд░ рд░рдЪрдирд╛ рдХреА рдЬрд╛ рд╕рдХрддреА рд╣реИред

:+1: рдЙрди рджреЛрдиреЛрдВ рдХреЛ рджреЛрдмрд╛рд░рд╛ рдЬреЛрдбрд╝рдиреЗ рдкрд░ (рд╡рд┐рд╕реНрддрд╛рд░ рдФрд░ рд▓рд┐рдЦреЗрдВ)ред рд╡реЗ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдХреЗрд╡рд▓ 2KB IMO рдХреЗ рд▓рд┐рдП рдЗрд╕рдХреЗ рд▓рд╛рдпрдХ рд╣реИрдВред

рдПрдХ рдЕрдиреНрдп рд╡рд┐рдХрд▓реНрдк рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЖрдВрддрд░рд┐рдХ jss рдЙрджрд╛рд╣рд░рдг рдХреЛ рдЫрд┐рдкрд╛рдирд╛ рд╣реИ рдФрд░ рдпрд╣ рд╕реНрдкрд╖реНрдЯ рдХрд░рдирд╛ рд╣реИ рдХрд┐ рд╕реНрдЯрд╛рдЗрд▓ рдХреЗ рд▓рд┐рдП рд╕реНрд╡рдпрдВ рдХреЗ jss рд╕реЗрдЯрдЕрдк рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреИрд╕реЗ рдХрд░реЗрдВред

рдирдорд╕реНрддреЗ, рдореИрдВ рдПрдХ nextjs рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ jss-рд╡рд┐рд╕реНрддрд╛рд░ рдЬреЛрдбрд╝рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣рд╛ рд╣реВрдБ, (jss-rtl рдкреНрд▓рдЧрдЗрди рдЙрджрд╛рд╣рд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ) рд╕рдлрд▓рддрд╛ рдХреЗ рдмрд┐рдирд╛ред рдХреЛрдИ рдЗрд╕реЗ рдХрд╛рдо рдХрд░ рд╕рдХрддрд╛ рд╣реИ?

^ рднреА рдЬрд╛рдирдирд╛ рдЪрд╛рд╣реЗрдВрдЧреЗ

рдпрд╣рд╛рдВ рдореИрдВ рдкреЛрд╕реНрдЯ рдХрд░рддрд╛ рд╣реВрдВ рдХрд┐ рдореИрдВ рдХреНрдпрд╛ рдХрд░рддрд╛ рд╣реВрдВред рдореИрдВ рдирд╣реАрдВ рдЬрд╛рдирддрд╛ рдХрд┐ рдХреИрд╕реЗ GenerateClassName рдХреЛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдП рдХреНрдпреЛрдВрдХрд┐ nextjs рдЙрджрд╛рд╣рд░рдг рдореЗрдВ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рдХреЛ рдЖрдзрд╛рд░ рдХреЗ рд░реВрдк рдореЗрдВ рд▓реЗрддреЗ рд╣реБрдП:
https://github.com/mui-org/material-ui/tree/master/examples/nextjs

рдкрд╣рд▓реЗ рдЬреЗрдПрд╕рдПрд╕-рд╡рд┐рд╕реНрддрд╛рд░ рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдВ
npm i --save jss-extend

/рдкреГрд╖реНрда/_app.js

import React from 'react';
import App, { Container } from 'next/app';
import { MuiThemeProvider } from '@material-ui/core/styles';
import CssBaseline from '@material-ui/core/CssBaseline';
import JssProvider from 'react-jss/lib/JssProvider';
import getPageContext from '../src/getPageContext';

/* --------------------------------------------------------------------------------
* ADD THE IMPORTS
*-----------------------------------------------------------------------------------*/
import { createGenerateClassName, jssPreset } from '@material-ui/core/styles';
import { create } from 'jss';
import jssExtend from 'jss-extend';

const jss = create({ plugins: [...jssPreset().plugins, JssProvider ()] });


class MyApp extends App {
  constructor(props) {
    super(props);
    this.pageContext = getPageContext();
  }

  pageContext = null;

  componentDidMount() {
    // Remove the server-side injected CSS.
    const jssStyles = document.querySelector('#jss-server-side');
    if (jssStyles && jssStyles.parentNode) {
      jssStyles.parentNode.removeChild(jssStyles);
    }
  }

  render() {
    const { Component, pageProps } = this.props;
    return (
      <Container>
        {/* Wrap every page in Jss and Theme providers 
             HERE ALSO ADD JSS TO PROVIDER
          */}
        <JssProvider
          jss={this.jss}
          registry={this.pageContext.sheetsRegistry}
          generateClassName={this.pageContext.generateClassName}
        >
          {/* MuiThemeProvider makes the theme available down the React
              tree thanks to React context. */}
          <MuiThemeProvider
            theme={this.pageContext.theme}
            sheetsManager={this.pageContext.sheetsManager}
          >
            {/* CssBaseline kickstart an elegant, consistent, and simple baseline to build upon. */}
            <CssBaseline />
            {/* Pass pageContext to the _document though the renderPage enhancer
                to render collected styles on server side. */}
            <Component pageContext={this.pageContext} {...pageProps} />
          </MuiThemeProvider>
        </JssProvider>
      </Container>
    );
  }
}

export default MyApp;

рдХреНрдпрд╛ рдПрдХреНрд╕рдЯреЗрдВрдб рдмреИрдХ рдЬреЛрдбрд╝рдиреЗ рдХреА рдХреЛрдИ рдпреЛрдЬрдирд╛ рд╣реИ?

рдореИрдВ https://material-ui.com/guides/right-to-left/#3 -jss-rtl рдкрд░ рдЧрд╛рдЗрдб рдХрд╛ рдЕрдиреБрд╕рд░рдг рдХрд░ рд░рд╣рд╛ рд╣реВрдВ, рдФрд░ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП rtl рдХреЛ рдмрджрд▓ рджрд┐рдпрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рдХреНрдпреЛрдВ рдкрд░ рдХреЛрдИ рдЕрдВрддрд░реНрджреГрд╖реНрдЯрд┐?

рдореИрдВ рдпрд╣ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рдФрд░ рдкреНрд▓рдЧрдЗрди рд▓реЛрдб рдирд╣реАрдВ рд╣реЛ рд░рд╣рд╛ рд╣реИ (v3.2.2)
рдХреЛрдИ рд╡рд┐рдЪрд╛рд░?

import React from 'react'
import ReactDOM from 'react-dom'
import {
  MuiThemeProvider,
  createMuiTheme,
  createGenerateClassName,
  jssPreset
} from '@material-ui/core/styles'
import JssProvider from 'react-jss/lib/JssProvider'
import { create } from 'jss'
import jssExtend from 'jss-extend'
import CssBaseline from '@material-ui/core/CssBaseline'
import { UserProvider } from './context/User'
import App from './components/App'

const jss = create({ plugins: [...jssPreset().plugins, jssExtend()] })
const generateClassName = createGenerateClassName()

const theme = createMuiTheme({ ... })

const Main = () => (
  <JssProvider jss={jss} generateClassName={generateClassName}>
    <MuiThemeProvider theme={theme}>
      <CssBaseline/>
        <App/>
    </MuiThemeProvider>
  </JssProvider>
)

рдЖрдкрдХреЛ рдкреНрд▓рдЧрдЗрдиреНрд╕ рдХреЛ рд╕рд╣реА рдХреНрд░рдо рдореЗрдВ рд╕реЗрдЯ рдХрд░рдирд╛ рд╣реЛрдЧрд╛, http://cssinjs.org/plugins?v=v9.8.7

рдЖрдк mui рдХреЗ рд▓рд┐рдП рдмрдирд╛рдП рдЧрдП .a рдкреНрд░реАрд╕реЗрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдФрд░ рдЧрд▓рдд рдХреНрд░рдо рдореЗрдВ jssExtend рдЬреЛрдбрд╝ рд░рд╣реЗ рд╣реИрдВред рдЗрд╕рдХреЗ рдмрдЬрд╛рдп рдЖрдк рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛-рдЬреЗрдПрд╕рдПрд╕ рд╕реЗ рдПрдХ рдЬреЗрдПрд╕рдПрд╕ рдЗрдВрд╕реНрдЯреЗрдВрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬрд┐рд╕рдореЗрдВ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╕рднреА рдкреНрд░реАрд╕реЗрдЯ рд▓рд╛рдЧреВ рд╣реИрдВ: "react-jss" рд╕реЗ {jss} рдЖрдпрд╛рдд рдХрд░реЗрдВ рдпрд╛ http://cssinjs.org/jss-preset-default?v рд╕реЗ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдкреНрд░реАрд╕реЗрдЯ рдЖрдпрд╛рдд рдХрд░реЗрдВред

рдмрд╕ рдЗрд╕ рдореБрджреНрджреЗ рдореЗрдВ рднрд╛рдЧреЛред рдпрд╣ рднреА рд╡рд┐рд╢реНрд╡рд╛рд╕ рдХрд░реЗрдВ рдХрд┐ рдЗрд╕реЗ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рдЬрдЧрд╣ рдореЗрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдерд╛ред

рдореИрдВ рддрд░реНрдХ рджреВрдВрдЧрд╛ рдХрд┐ рдпрд╣ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рдЗрд╕ рдЖрдзрд╛рд░ рдкрд░ рднреА рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ @oliviertassinari рдХрд╛ рддрд░реНрдХ рдкрд░реНрдпрд╛рдкреНрдд рд░реВрдк рд╕реЗ рдордЬрдмреВрдд рдирд╣реАрдВ рд╣реИред рдЖрдВрд╢рд┐рдХ рд░реВрдк рд╕реЗ, рдХреНрдпреЛрдВрдХрд┐ рдпрджрд┐ рд╡рд┐рд╕реНрддрд╛рд░/рд▓рд┐рдЦрдиреЗ рдХреЛ рдкреНрд░реЛрддреНрд╕рд╛рд╣рд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдПрдХ рдЕрдЪреНрдЫрд╛ рдореМрдХрд╛ рд╣реИ рдХрд┐ рдХреЛрдбрдмреЗрд╕ рдЕрдирд╛рд╡рд╢реНрдпрдХ рд╕реАрдПрд╕рдПрд╕ рд╕реЗ рдЕрддрд┐рд░рд┐рдХреНрдд рдмреНрд▓реЛрдЯ рдХреЗ рд╕рд╛рде рд╕рдорд╛рдкреНрдд рд╣реЛ рд╕рдХрддрд╛ рд╣реИ - рдЬрд┐рд╕рд╕реЗ рдЕрдирд╛рд╡рд╢реНрдпрдХ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рднреА рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ 2kb рдЬрд┐рддрдирд╛ рд╣рд╛рдирд┐рдХрд╛рд░рдХ рди рд╣реЛ рдФрд░ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рд╡рд┐рд╕реНрддрд╛рд░/рд░рдЪрдирд╛ рдЬрд┐рддрдирд╛ рдЕрдзрд┐рдХ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рди рд╣реЛ, рд▓реЗрдХрд┐рди рдХреЛрдб рд░рдЦрд░рдЦрд╛рд╡ рднреА рдпрд╣рд╛рдВ рдПрдХ рдХрд╛рд░рдХ рд╣реИред рдЕрдВрдд рдореЗрдВ, рдореЗрд░рд╛ рддрд░реНрдХ рдЗрддрдирд╛ рдордЬрдмреВрдд рдирд╣реАрдВ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд╣рд╛рде рдореЗрдВ рд╡рд┐рдХрд▓реНрдкреЛрдВ рдХреЗ рд▓рд┐рдП рдЗрддрдирд╛ рдордЬрдмреВрдд рддрд░реНрдХ рдирд╣реАрдВ рд╣реЛрдиреЗ рдХреА рдЙрдкрд╕реНрдерд┐рддрд┐ рдореЗрдВ ... рдореИрдВ рдХрд╣рддрд╛ рд╣реВрдВ рдХрд┐ рднреАрдбрд╝ рдХреЛ рд╡рд╣ рджреЗрдВ рдЬреЛ рд╡реЗ рдЪрд╛рд╣рддреЗ рд╣реИрдВ! :рдбреА

рдореИрдВ рд╕рд╣рдордд рд╣реВрдВ рдХрд┐ рд╡рд┐рд╕реНрддрд╛рд░ рдФрд░ рд▓рд┐рдЦреЗрдВ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рд╢рд╛рдорд┐рд▓ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рд╡реЗ рдРрд╕реЗ рдореМрд▓рд┐рдХ рдХрд╛рд░реНрдп рд╣реИрдВ рдФрд░ рдпрд╣реА рдХрд╛рд░рдг рд╣реИ рдХрд┐ рдореИрдВ рдЬреЗрдПрд╕рдПрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВред рдореБрдЭреЗ рдЙрдиреНрд╣реЗрдВ рдлрд┐рд░ рд╕реЗ рдЬреЛрдбрд╝рдирд╛ рдЕрдЪреНрдЫрд╛ рд▓рдЧреЗрдЧрд╛, рдХреНрдпреЛрдВрдХрд┐ рдЫреЛрдЯреА рдкрд░рд┐рдпреЛрдЬрдирд╛рдПрдВ рднреА рдЙрдирдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреА рдФрд░ рдХрд╕реНрдЯрдо рдЗрдВрд╕реНрдЯрд╛рд▓ рддреБрд▓рдирд╛рддреНрдордХ рд░реВрдк рд╕реЗ рдмрд╣реБрдд рд▓рдВрдмрд╛ рд╣реИред

@AdamWhitehurst рдХреНрдпрд╛ рдЖрдк рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ рдЙрдард╛ рд╕рдХрддреЗ рд╣реИрдВ? рдпрд╣ рд╣рдореЗрдВ рдмреЗрд╣рддрд░ рдЯреНрд░реЗрдбрдСрдлрд╝ рдмрдирд╛рдиреЗ рдореЗрдВ рдорджрдж рдХрд░реЗрдЧрд╛ :)ред

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╣рдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рднрд╛рд░рд┐рдд рдЖрдпрд╛рдореЛрдВ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░рдирд╛ рд╣реЛрдЧрд╛:

  • рдмрд╛рддрдЪреАрдд рдореЗрдВ рдЕрдкрд╡реЛрдЯ/рдкреНрд░рддрд┐рднрд╛рдЧрд┐рдпреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ред
  • рд░рдирдЯрд╛рдЗрдо рд▓рд╛рдЧрдд: ? (рдХреНрдпрд╛ рдХреЛрдИ рдЗрд╕рдХреЗ рд╕рд╛рде рд╣рдорд╛рд░рд╛ рдмреЗрдВрдЪрдорд╛рд░реНрдХ рд╕реВрдЯ рдЪрд▓рд╛ рд╕рдХрддрд╛ рд╣реИ?)
  • рдмрдВрдбрд▓ рдЖрдХрд╛рд░ рдХреА рд▓рд╛рдЧрдд: 613 рдмреА ред рдЗрд╕ рдЖрдпрд╛рдо рдХреЗ рд╕рд╛рде рдореБрджреНрджрд╛ рдПрдХреНрд╕ рдХреЗ рд▓рд┐рдП рдХреЗрд╡рд▓ рд╣рдорд╛рд░реЗ рдШрдЯрдХреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рд▓рд╛рдЧрдд рдХреЗ рдЖрд╕рдкрд╛рд╕ рд╣реИ, рдЬреИрд╕реЗ рдХрд┐ рдореЙрдбрд▓ред

рдЖрдЦрд┐рд░рдХрд╛рд░, рд╣рдо рдЗрд╕рдХреЗ рд▓рд┐рдП рдПрдХ рдЯреНрд╡рд┐рдЯрд░ рдкреЛрд▓ рдЪрд▓рд╛ рд╕рдХрддреЗ рд╣реИрдВ .

рд░рдирдЯрд╛рдЗрдо рд▓рд╛рдЧрдд рдпрджрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рд╕реНрдерд╛рдкрд┐рдд рдкреНрд▓рдЧрдЗрдиреНрд╕ рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ / рд░рдЪрдирд╛ рд╣реИ, рддреЛ рдпрд╣ рд▓рдЧрднрдЧ 0 рд╣реИ, рдпрд╣ рдПрдХ рдЬрд╛рдБрдЪ рд╣реИ рдХрд┐ рдХреНрдпрд╛ extend рдпрд╛ composes рд╕рдВрдкрддреНрддрд┐ рдкрд░рд┐рднрд╛рд╖рд┐рдд рд╣реИ, рдпрджрд┐ рдирд╣реАрдВ - рдпрд╣ рдХреБрдЫ рднреА рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ

рдкреВрд░реА рддрд░рд╣ рд╕реЗ, рдореИрдВрдиреЗ рдкрд╣рд▓реА рдкреЛрд╕реНрдЯ рдХреЛ рдКрдкрд░ рдЙрдард╛рдпрд╛, рдХреНрдпрд╛ рдЖрдкрдХрд╛ рдорддрд▓рдм рд╣реИ? рдореИрдВ рдЗрд╕ рд╕рдм рдХреЗ рд▓рд┐рдП рдирдпрд╛ рд╣реВрдБ, рдЗрд╕рд▓рд┐рдП рдореЗрд░реЗ рд╕рд╛рде рд░рд╣реЛ, рд╣рд╛рд╣рд╛ред

рдореЗрд░рд╛ рдЕрдкрд╡реЛрдЯ рднреА рд▓реЗрдВ

рдПрдХ рдФрд░ рд╡рд┐рдЪрд╛рд░ рдпрд╣ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдкреНрд░рджрд░реНрд╢рдирдХрд╛рд░реА рд╡рд░реНрдХрдЕрд░рд╛рдЙрдВрдб рдХреИрд╕реЗ рд╣реИрдВред рдореЗрд░реЗ рдХреЛрдб рд╕реЗ рдЙрджрд╛рд╣рд░рдг:

<Typography variant='h5' className={`${classes.sideLink} ${classes.leftSideLink}`} >About</Typography>

рдЗрд╕ рд╡рд░реНрдХрдЕрд░рд╛рдЙрдВрдб рдХреЛ рдХрд░рдиреЗ рдХреА рд▓рд╛рдЧрдд рдХреНрдпрд╛ рд╣реЛрдЧреА?

рд╡рд┐рд╕реНрддрд╛рд░ рдФрд░ рд░рдЪрдирд╛ рдХреЗ рд▓рд┐рдП рдЗрд╕ рдореБрджреНрджреЗ рдкрд░ рдХреЛрдИ рдЦрдмрд░? рджреВрд╕рд░реЛрдВ рдХреА рддрд░рд╣, рдореИрдВ рднреА рдЕрд▓рдЧ рдкреНрд▓рдЧрдЗрдиреНрд╕ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реЛрдВ рдХрд╛ рдкрд╛рд▓рди рдХрд░рдиреЗ рдореЗрдВ рдЕрд╕рдорд░реНрде рдерд╛ред рдореИрдВрдиреЗ рдЙрджрд╛рд╣рд░рдг рдХреА рдкреНрд░рддрд┐рд▓рд┐рдкрд┐ рднреА рдмрдирд╛рдИ рд▓реЗрдХрд┐рди StylesProvider рдХреЗ рд╕рд╛рде рд╕рдорд╕реНрдпрд╛рдУрдВ рдореЗрдВ рднрд╛рдЧ рдЧрдпрд╛ред

@gabrielliwerant рдирдП рдкреНрд▓рдЧрдЗрдиреНрд╕ рдЬреЛрдбрд╝рдирд╛ рдЖрд╕рд╛рди рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдпрджрд┐ рд╕рд╛рдордЧреНрд░реА-рдпреВрдЖрдИ рдЙрд╕ рдкрд░ рдЕрдорд▓ рдХрд░рдиреЗ рдореЗрдВ рд╡рд┐рдлрд▓ рд░рд╣рддрд╛ рд╣реИ рддреЛ рд╣рдореЗрдВ рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдкрд░ рдзреНрдпрд╛рди рджреЗрдирд╛ рдЪрд╛рд╣рд┐рдПред

рдореИрдВ рдмрдВрдж рдХрд░ рд░рд╣рд╛ рд╣реВрдБ рдХреНрдпреЛрдВрдХрд┐ рд╣рдо рдкрд╣рд▓реЗ рд╣реА wait for upvotes рд▓реЗрдмрд▓ рдЬреЛрдбрд╝ рдЪреБрдХреЗ рд╣реИрдВред

@gabrielliwerant

рдирд╡реАрдирддрдо рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдпрд╣рд╛рдВ рд╣реИ: https://github.com/cssinjs/jss/tree/master/packages/jss-plugin-extend

npm i jss-plugin-extend
import {jssPreset, StylesProvider, ThemeProvider} from '@material-ui/styles';
import {create} from "jss";
import jssPluginSyntaxExtend from "jss-plugin-extend";

const jss = create({
    plugins: [...jssPreset().plugins, jssPluginSyntaxExtend()],
});

рддрдм рдРрд╕рд╛ рдХреБрдЫ рдХрд╛рдлреА рдЕрдЪреНрдЫрд╛ рдХрд╛рдо рдХрд░рддрд╛ рдкреНрд░рддреАрдд рд╣реЛрддрд╛ рд╣реИ ...

    render() {
        const {Component, pageProps} = this.props;

        return (
            <Container>
                <Head>
                    <title></title>
                </Head>
                <StylesProvider jss={jss}>
                    <ThemeProvider theme={theme}>
                            <CssBaseline/>
                            <Component {...pageProps} />
                    </ThemeProvider>
                </StylesProvider>
            </Container>
        );
    }

@gabrielliwerant

рдирд╡реАрдирддрдо рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдпрд╣рд╛рдВ рд╣реИ: https://github.com/cssinjs/jss/tree/master/packages/jss-plugin-extend

npm i jss-plugin-extend
import {jssPreset, StylesProvider, ThemeProvider} from '@material-ui/styles';
import {create} from "jss";
import jssPluginSyntaxExtend from "jss-plugin-extend";

const jss = create({
  plugins: [...jssPreset().plugins, jssPluginSyntaxExtend()],
});

рддрдм рдРрд╕рд╛ рдХреБрдЫ рдХрд╛рдлреА рдЕрдЪреНрдЫрд╛ рдХрд╛рдо рдХрд░рддрд╛ рдкреНрд░рддреАрдд рд╣реЛрддрд╛ рд╣реИ ...

  render() {
      const {Component, pageProps} = this.props;

      return (
          <Container>
              <Head>
                  <title></title>
              </Head>
              <StylesProvider jss={jss}>
                  <ThemeProvider theme={theme}>
                          <CssBaseline/>
                          <Component {...pageProps} />
                  </ThemeProvider>
              </StylesProvider>
          </Container>
      );
  }

рдореИрдВрдиреЗ рдЗрд╕ рд╕рдорд╛рдзрд╛рди рдХреА рдХреЛрд╢рд┐рд╢ рдХреА, рд▓реЗрдХрд┐рди рдЗрд╕ рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ рдХреЗрд╡рд▓ рдЬреЗрдПрд╕-рдкреНрд▓рдЧрдЗрди-рд╡рд┐рд╕реНрддрд╛рд░ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рд╕рднреА рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рдкреНрд▓рдЧрдЗрдиреНрд╕ ( ... jssPreset ().plugins ) рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ, рдЬреИрд╕реЗ рдХрд┐ рд╡реЗ рд╡рд╣рд╛рдВ рдирд╣реАрдВ рдереЗред рд╕рд╛рдордЧреНрд░реА-рдпреВрдЖрдИ рд╡реА4.5, рдЬреЗрдПрд╕рдПрд╕ рд╡реА10

рдпрд╣ рд╡рд╣ рд╕рдорд╛рдзрд╛рди рд╣реИ рдЬреЛ рдореЗрд░реЗ рд▓рд┐рдП рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ:

import jss from 'jss';
import preset from 'jss-preset-default';
import { StylesProvider } from '@material-ui/styles';

jss.setup(preset());
<StylesProvider jss={jss}>
  ...
</StylesProvider>
"@material-ui/styles": "^4.5.0",
"jss": "^10.0.0",
"jss-preset-default": "^10.0.0-alpha.27"

рд╣рд╛рдп рджреЛрд╕реНрддреЛрдВ, MuiThemeProvider рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдФрд░ jss рдкреНрд▓рдЧрдЗрдиреНрд╕ рдХрд╛ рднреА рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реИ? рдкреНрд░рд▓реЗрдЦрди рдереЛрдбрд╝рд╛ рдкреБрд░рд╛рдирд╛ рдкреНрд░рддреАрдд рд╣реЛрддрд╛ рд╣реИ, рдФрд░ рдореЗрд░реЗ рдкрд╛рд╕ рдПрдХ рд╕рдорд╛рдзрд╛рди рд╣реИ рдЬреЛ рд╡рд┐рд╕реНрддрд╛рд░ рдФрд░ рд░рдЪрдирд╛ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдирд╛ рдмрдВрдж рдХрд░ рджреЗрддрд╛ рд╣реИред
рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рд╕рдВрджрд░реНрдн рдХреЗ рдХреБрдЫ рдмрджрд▓рд╛рд╡ рдХреЗ рдХрд╛рд░рдг рд╣реИред рдореЗрд░рд╛ рдХреЛрдб рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ:

import { MuiThemeProvider, createMuiTheme } from '@material-ui/core/styles';
import { StylesProvider, jssPreset, createGenerateClassName } from '@material-ui/styles';
import { create } from 'jss';
import jssCompose from 'jss-plugin-compose';
import jssExtend from 'jss-plugin-extend';

const ThemeProvider = ({ children }) => (
  <StylesProvider jss={jss} generateClassName={generateClassName}>
    <MuiThemeProvider theme={theme}>
      <ThemeContext.Provider value={theme}>{children}</ThemeContext.Provider>
    </MuiThemeProvider>
  </StylesProvider>
);

рд╣рд╛рдВ, рдпрд╣ рд╕рдВрднрд╡ рд╣реИ, рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреЗ рд▓рд┐рдП рджрд╛рдПрдВ рд╕реЗ рдмрд╛рдПрдВ рд╕рдорд░реНрдерди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред

@oliviertassinari рдХрд╕реНрдЯрдо рдЬреЗрдПрд╕рдПрд╕ рдкреНрд▓рдЧрдЗрдиреНрд╕ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рддрд░реАрдХреЗ рдкрд░ рдХреЛрдИ рдЙрджрд╛рд╣рд░рдг рд╣реИ jss-extend рдЕрдЧрд▓реЗрдЬреЗрдПрд╕ рдХреЗ рд╕рд╛рде?

@guiihlopes рдореИрдВ рдЖрд░рдЯреАрдПрд▓ рдЧрд╛рдЗрдб рдХрд╛ рдкрд╛рд▓рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░реЛрддреНрд╕рд╛рд╣рд┐рдд рдХрд░реВрдВрдЧрд╛, рдпрд╣ рд╕рдорд╛рди рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП: https://material-ui.com/guides/right-to-left/#3 -jss-rtlред

@guiihlopes рдореИрдВ рдЖрд░рдЯреАрдПрд▓ рдЧрд╛рдЗрдб рдХрд╛ рдкрд╛рд▓рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░реЛрддреНрд╕рд╛рд╣рд┐рдд рдХрд░реВрдВрдЧрд╛, рдпрд╣ рд╕рдорд╛рди рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП: https://material-ui.com/guides/right-to-left/#3 -jss-rtlред

рдмрдврд╝рд┐рдпрд╛ ... рдореИрдВрдиреЗ рдЙрд╕реА рдЧрд╛рдЗрдб рдХрд╛ рдкрд╛рд▓рди рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА рдФрд░ рдореИрдВ рдЗрд╕рдореЗрдВ рдлрдВрд╕ рдЧрдпрд╛ рд╣реВрдВ:

async getInitialProps(ctx) {
    // imported jssExtend from 'jss-plugin-extend';
    const plugins = [...jssPreset().plugins, jssExtend()];
    const jss = create({ plugins });
    // Render app and page and get the context of the page with collected side effects.
    const sheets = new ServerStyleSheets({
      jss,
    });
    const originalRenderPage = ctx.renderPage;

    ctx.renderPage = () =>
      originalRenderPage({
        enhanceApp: App => props => sheets.collect(<App {...props} />),
      });

    const initialProps = await Document.getInitialProps(ctx);

    return {
      ...initialProps,
      // Styles fragment is rendered after the app and page rendering finish.
      styles: [...React.Children.toArray(initialProps.styles), sheets.getStyleElement()],
    };
  }

рдореИрдВрдиреЗ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЧрд╛рдЗрдб рдХрд╛ рднреА рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рд╣реИ: https://github.com/mui-org/material-ui/blob/master/examples/nextjs/pages/_document.js

Idk рдпрд╣ рдХрд╛рдо рдХреНрдпреЛрдВ рдирд╣реАрдВ рдХрд░ рд░рд╣рд╛ рд╣реИ, ServerStyleSheets рдкрд╛рд╕ рд╡рд┐рдХрд▓реНрдк StylesProvider рдкрд░ рдФрд░ рдЗрд╕реЗ рдХрд╛рдо рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП, рд╣реИ рдирд╛?
https://github.com/mui-org/material-ui/blob/master/packages/material-ui-styles/src/ServerStyleSheets/ServerStyleSheets.js#L24

рдХреНрдпрд╛ рдЖрдк @oliviertassinari рдореБрдЭреЗ рдХреБрдЫ рд╡рд┐рдЪрд╛рд░ рджреЗ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдпрд╣ рдареАрдХ рд╕реЗ рдХрд╛рдо рдХреНрдпреЛрдВ рдирд╣реАрдВ рдХрд░ рд░рд╣рд╛ рд╣реИ?

@guiihlopes рдЖрдкрдХреЗ рдкреНрд▓рдЧрдЗрдиреНрд╕ рдХрд╛ рдХреНрд░рдо рдмрджрд▓рддреЗ рд╣реИрдВ рдФрд░ рдкреНрд░реАрд╕реЗрдЯ рд╕реЗ рдкрд╣рд▓реЗ jssExtend рдбрд╛рд▓рддреЗ рд╣реИрдВред ;)

@guiihlopes рдЖрдкрдХреЗ рдкреНрд▓рдЧрдЗрдиреНрд╕ рдХрд╛ рдХреНрд░рдо рдмрджрд▓рддреЗ рд╣реИрдВ рдФрд░ рдкреНрд░реАрд╕реЗрдЯ рд╕реЗ рдкрд╣рд▓реЗ jssExtend рдбрд╛рд▓рддреЗ рд╣реИрдВред ;)

рдореИрдВрдиреЗ рдкрд╣рд▓реЗ рд╣реА рдХреЛрд╢рд┐рд╢ рдХрд░ рд▓реА рд╣реИ, рдЕрднреА рднреА рдХрд╛рдо рдирд╣реАрдВ рдХрд░ рд░рд╣рд╛ рд╣реИ ...: /

рдпрджреНрдпрдкрд┐ рдХреЛрдИ StyleProvider рдореЗрдВ рд╡рд┐рд╕реНрддрд╛рд░рд┐рдд рдкреНрд▓рдЧрдЗрди рдЬреЛрдбрд╝ рд╕рдХрддрд╛ рд╣реИ, рдПрдордпреВрдЖрдИ рдореЗрдВ рдЬреЗрдПрд╕рдПрд╕ рд╕реНрдЯрд╛рдЗрд▓рд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдЯреАрдПрд╕ рдЯрд╛рдЗрдк рдкрд░рд┐рднрд╛рд╖рд╛рдПрдВ рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХреЛ рд╡рд┐рд╕реНрддрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рджреЗрддреА рд╣реИрдВред

рдпрджреНрдпрдкрд┐ рдХреЛрдИ StyleProvider рдореЗрдВ рд╡рд┐рд╕реНрддрд╛рд░рд┐рдд рдкреНрд▓рдЧрдЗрди рдЬреЛрдбрд╝ рд╕рдХрддрд╛ рд╣реИ, рдПрдордпреВрдЖрдИ рдореЗрдВ рдЬреЗрдПрд╕рдПрд╕ рд╕реНрдЯрд╛рдЗрд▓рд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдЯреАрдПрд╕ рдЯрд╛рдЗрдк рдкрд░рд┐рднрд╛рд╖рд╛рдПрдВ рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХреЛ рд╡рд┐рд╕реНрддрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рджреЗрддреА рд╣реИрдВред

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ @mifrej рд╕рд╣реА рд╣реИред рдореИрдВрдиреЗ рдпрд╣рд╛рдВ рдмрддрд╛рдП рдЧрдП рд▓рдЧрднрдЧ рд╕рднреА рддрд░реАрдХреЛрдВ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА рд╣реИ рд▓реЗрдХрд┐рди рдЙрдирдореЗрдВ рд╕реЗ рдХреЛрдИ рднреА рдЕрдм рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рд╢рд╛рдпрдж рд╡реЗ рдкрд╣рд▓реЗ рдХрд╛рдо рдХрд░рддреЗ рдереЗ!

рдХреНрдпрд╛ рдпрд╣ рдкреГрд╖реНрда рдЙрдкрдпреЛрдЧреА рдерд╛?
0 / 5 - 0 рд░реЗрдЯрд┐рдВрдЧреНрд╕

рд╕рдВрдмрдВрдзрд┐рдд рдореБрджреНрджреЛрдВ

ghost picture ghost  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

ghost picture ghost  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

pola88 picture pola88  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

finaiized picture finaiized  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

activatedgeek picture activatedgeek  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ