Material-ui: [рд╕рд╛рде рд╕реНрдЯрд╛рдЗрд▓] рд╕реНрдЯрд╛рдЗрд▓ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рднреАрддрд░ рд╕реЗ рдХрдВрдкреЛрдиреЗрдВрдЯ рдХреЗ рдкреНрд░реЙрдкреНрд╕ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдЬреЛрдбрд╝реЗрдВ

рдХреЛ рдирд┐рд░реНрдорд┐рдд 2 рдЕрдЧре░ 2017  ┬╖  39рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: mui-org/material-ui

рд╡рд┐рд╡рд░рдг

createStyleSheet рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп, рдШрдЯрдХ рдХреЗ рдкреНрд░реЛрдк рддрдХ рдкрд╣реБрдВрдЪрдиреЗ рдХрд╛ рдХреЛрдИ рддрд░реАрдХрд╛ рдирд╣реАрдВ рд╣реИ (рдХрдо рд╕реЗ рдХрдо рдореБрдЭреЗ рдкрддрд╛ рд╣реИ)ред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдХрднреА-рдХрднреА рдпрд╣ рдЖрдХрд╛рд░, рдпреВрдЖрд░рдПрд▓ рдЫрд╡рд┐рдпреЛрдВ рдФрд░ рдЕрдиреНрдп рд╢реИрд▓рд┐рдпреЛрдВ рдХреЛ рдШрдЯрдХ рдХреЗ рд▓рд┐рдП рд╕рд╣рд╛рд░рд╛ рдХреЗ рд░реВрдк рдореЗрдВ рдкрд╛рд░рд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реИред

рдЖрдЬ рдЗрд╕рдХрд╛ рдПрдХрдорд╛рддреНрд░ рд╕рдорд╛рдзрд╛рди рдЗрди рдЪреАрдЬреЛрдВ рдХреЛ рдЗрдирд▓рд╛рдЗрди-рд╢реИрд▓рд┐рдпреЛрдВ рдореЗрдВ рдЕрд▓рдЧ рдХрд░рдирд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЬрд╣рд╛рдВ рддрдХ тАЛтАЛтАЛтАЛрдореБрдЭреЗ рдкрддрд╛ рд╣реИ, рд╕рд╛рдордЧреНрд░реА-рдпреВрдЖрдИ v1 jss рдФрд░ react-jss , рдФрд░ рд╡реЗ рджреЛрдиреЛрдВ рдЖрдкрдХреЛ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╕рдВрднрд╛рд╡рдирд╛ рджреЗрддреЗ рд╣реИрдВ рдкреНрд░реЛрдк рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкреНрд░реЛрдк рддрдХ рдкрд╣реБрдВрдЪреЗрдВ рдФрд░ рдлрд┐рд░ рд╡рд╛рдВрдЫрд┐рдд рд╢реИрд▓реА рд▓реМрдЯрд╛рдПрдВ, рдЬреИрд╕реЗ:

const styles = {
  button: {
    background: props => props.color
  },
  root: {
    backgroundImage: props => `url(${props.backgroundImage})`
  }
}

// Reference: https://github.com/cssinjs/react-jss#example

рдЖрдк рд╕рд╛рдордЧреНрд░реА-рдпреВрдЖрдИ рдкрд░ рднреА рдРрд╕рд╛ рдХреБрдЫ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреНрдпрд╛ рд╕реЛрдЪрддреЗ рд╣реИрдВ?

enhancement important

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

рдореИрдВ рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ v1.x рдореАрд▓ рдХреЗ рдкрддреНрдерд░ рдореЗрдВ рдЬреЛрдбрд╝ рд░рд╣рд╛ рд╣реВрдВред рдХрд╛рдлреА рд▓реЛрдЧ рдЗрд╕рдХреА рдорд╛рдВрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВред рд╣рдо рдЬрд▓реНрдж рд╣реА рдЙрд╕ рддрдХ рдкрд╣реБрдВрдЪреЗрдВрдЧреЗред

capture d ecran 2018-07-29 a 13 12 03

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

рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛-рдЬреЗрдПрд╕рдПрд╕ рдЙрд╕ рд╕реБрд╡рд┐рдзрд╛ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИред рдЖрдк рдЗрд╕реЗ рд╣рдореЗрд╢рд╛ рд╣рдорд╛рд░реЗ рд╕реНрдЯрд╛рдЗрд▓рд┐рдВрдЧ рд╕рдорд╛рдзрд╛рди рдкрд░ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдпрд╣рд╛рдВ рдЙрд╕ рд╕реБрд╡рд┐рдзрд╛ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреА рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдкреНрд░реЗрд░рдгрд╛ рдШрдЯрдХреЛрдВ рдХреЗ рд╕рд░рд▓/рдмреЗрд╣рддрд░ рдЖрдВрддрд░рд┐рдХ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рдЖрд╕рдкрд╛рд╕ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдПред

React-jss injectStyles() рдпрд╣ рднреА рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ StyleRuleCallback рдкреНрд░реЙрдкреНрд╕ рдЬреЛрдбрд╝рдирд╛ рдмреЗрд╣рддрд░ рд╣реЛрдЧрд╛ред

const styles = (props, theme) => ({})
рдЗрд╕ рддрд░рд╣ рдЖрдк рд╕рд╣рд╛рд░рд╛ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдХреЗрд╡рд▓ рдореВрд▓реНрдпреЛрдВ рддрдХ рд╣реА рд╕реАрдорд┐рдд рдирд╣реАрдВ рд╣реИрдВред

@Shamplol рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рд╕реЗ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╣рдо рдЗрд╕ рдирдИ рд╕реБрд╡рд┐рдзрд╛ рдХрд╛ рд▓рд╛рдн рдЙрдард╛ рд╕рдХрддреЗ рд╣реИрдВ рддрд╛рдХрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдкреВрд░реНрд╡рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХреЗ рдмрдЬрд╛рдп рд╣рдорд╛рд░реЗ рдШрдЯрдХреЛрдВ рдХреЛ рдПрдХ рдХрд╕реНрдЯрдо color рдкреНрд░рджрд╛рди рдХрд░ рд╕рдХреЗрдВред CSS рдЖрдХрд╛рд░ рдХрд╛ рдкреНрд░рднрд╛рд╡ рд╕реНрдкрд╖реНрдЯ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдШрдЯрдХ рд░рдВрдЧ рдХреЛ рдФрд░ рднреА рд╕рд░рд▓ рдмрдирд╛ рджреЗрдЧрд╛ред рдпрд╣ рдЬрд╛рдВрдЪ рдХрд░рдиреЗ рд╡рд╛рд▓реА рдмрд╛рдд рд╣реИред рдлрд┐рд░, рдПрдХ рдмрд╛рд░ css рд╡реЗрд░рд┐рдПрдмрд▓ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рд╕рдорд░реНрдерди рдХрд╛рдлреА рдЕрдзрд┐рдХ рд╣реЛ рдЬрд╛рдиреЗ рдкрд░ (рдЕрдм рд╕реЗ 2 рд╡рд░реНрд╖?), рд╣рдо рдЗрд╕ рдкрд░ рднрд░реЛрд╕рд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

@oliviertassinari рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХреБрдЫ рдорд╛рдорд▓реЛрдВ рдореЗрдВ рд╕реАрдПрд╕рдПрд╕ рдХрд╛ рдЖрдХрд╛рд░ рдХрдо рдирд╣реАрдВ рд╣реЛрдЧрд╛?
рдЬреИрд╕рд╛ рдХрд┐ рдореИрдВ рдЗрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░рддрд╛ рд╣реВрдВ, рд╣рдо рд╡рд░реНрддрдорд╛рди рдореЗрдВ ...Primary рдФрд░ ...Accent рд▓рд┐рдП рд╕рднреА рд╡рд░реНрдЧреЛрдВ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддреЗ рд╣реИрдВ - рдХреНрдпрд╛ рдЗрд╕ рдкрд░рд┐рд╡рд░реНрддрди рдХрд╛ рдорддрд▓рдм рдпрд╣ рдирд╣реАрдВ рд╣реЛрдЧрд╛ рдХрд┐ рд╣рдореЗрдВ рдХреЗрд╡рд▓ ...Colorized рд▓рд┐рдП рдХрдХреНрд╖рд╛рдПрдВ рдмрдирд╛рдП рд░рдЦрдиреА рд╣реЛрдВрдЧреА? рдпрд╛ рдЖрдк рдЙрддреНрдкрдиреНрди рд╕реАрдПрд╕рдПрд╕ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЪрд┐рдВрддрд┐рдд рд╣реИрдВ?

рдХрд┐рд╕реА рднреА рддрд░рд╣ рд╕реЗ, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдбреАрдПрдХреНрд╕ рдореЗрдВ рдХрд╛рдлреА рд╕реБрдзрд╛рд░ рдХрд░реЗрдЧрд╛ рдХреНрдпреЛрдВрдХрд┐ рд╣рдореЗрдВ рдореВрд▓ рд░реВрдк рд╕реЗ рдЬрдЯрд┐рд▓ рд╡рд░реНрдЧреЛрдВ рдЬреИрд╕реЗ https://github.com/callemall/material-ui/blob/v1-beta/src/Button/Button.js#L11 рдХреЛ рдлрд┐рд░ рд╕реЗ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ рдЬрдм рд╣рдо рдЧреИрд░ рдкреИрд▓реЗрдЯ рд░рдВрдЧреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред

рдХреБрдЫ рдорд╛рдорд▓реЛрдВ рдореЗрдВ рд╕реАрдПрд╕рдПрд╕ рдЖрдХрд╛рд░ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХрдо рдирд╣реАрдВ рд╣реЛрдЧрд╛?

@ рд╕рдХреБрд▓рд╕реНрдЯреНрд░рд╛ рдмрддрд╛рдирд╛ рдореБрд╢реНрдХрд┐рд▓ рд╣реИред рдпрд╣ рдХреНрд░рд┐рдпрд╛рдиреНрд╡рдпрди рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░реЗрдЧрд╛ред рд╢рд╛рдпрдж :)ред

рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЯрд╛рдЗрдкрд┐рдВрдЧ рдХреЗ рдирдЬрд░рд┐рдП рд╕реЗ, рдпрд╣ рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛ рдпрджрд┐ _both_ props рдФрд░ theme рдХреЛ рд╕реНрдЯрд╛рдЗрд▓ рд╡рд┐рдирд┐рд░реНрджреЗрд╢ рдХреЗ рднреАрддрд░ рдЗрд╕ рддрд░рд╣ рд╕реЗ рдПрдХреНрд╕реЗрд╕ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:

const styles = {
  button: {
    background: ({ theme }) => theme.palette.primary[200]
  },
  root: {
    backgroundImage: ({ props }) => `url(${props.backgroundImage})`
  }
};

рдХрд╛рд░рдг рдпрд╣ рд╣реИ рдХрд┐ рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЕрдХреНрд╕рд░ withStyles рд▓рд┐рдП рд╕рд╣реА рдкреНрд░рдХрд╛рд░ рдХрд╛ рдЕрдиреБрдорд╛рди рд▓рдЧрд╛рдиреЗ рдореЗрдВ рд╡рд┐рдлрд▓ рд░рд╣рддрд╛ рд╣реИ рдЬрдм рдЗрд╕реЗ рдлрд╝рдВрдХреНрд╢рди рдСрдмреНрдЬреЗрдХреНрдЯ рдкрд╛рд╕ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЖрдкрдХреЛ рдЗрд╕реЗ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрддрд┐рд░рд┐рдХреНрдд рдкреНрд░рдХрд╛рд░ рдХреА рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдВ рдкреНрд░рджрд╛рди рдХрд░рдиреА рд╣реЛрдВрдЧреА, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП

withStyles<'button' | 'root'>(theme => ...)

рдпрджрд┐ рдкреНрд░реЙрдкреНрд╕ рдХреЛ рднреА рдкрд╛рд╕ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдпрд╣ рдмрди рдЬрд╛рдПрдЧрд╛

withStyles<'button' | 'root', Props>((theme, props) => ...)

рдЗрд╕рдХреА рд╡рд░реНрддрдорд╛рди рд╕реНрдерд┐рддрд┐ рдХреНрдпрд╛ рд╣реИ? рдЙрд╕ рд╕реБрд╡рд┐рдзрд╛ рдХрд╛ рд╣реЛрдирд╛ рд╡рд╛рдХрдИ рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛

@lucasmafra рдореИрдВрдиреЗ рдЗрд╕ рд╕реБрд╡рд┐рдзрд╛ рдХреЛ рдкреЛрд╕реНрдЯ v1 рд░рд┐рд▓реАрдЬрд╝ рдорд╛рдЗрд▓рд╕реНрдЯреЛрди рдореЗрдВ рдЬреЛрдбрд╝рд╛ рд╣реИред рдЬрд┐рддрдиреА рдЬрд▓реНрджреА рд╣рдо v1 рдЬрд╛рд░реА рдХрд░ рд╕рдХреЗрдВ, рдЙрддрдирд╛ рдЕрдЪреНрдЫрд╛ рд╣реИред

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

рдЖрдк рд╣рдореЗрд╢рд╛ рдПрдХ рдХрд╕реНрдЯрдо рдереАрдо рд╕реЗрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рдЗрд╕ рдХрдиреНрд╡реЗрдВрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ: рд╣рдо рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдкрд╕рдВрдж рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рдХреИрд╕реЗ рд╕реНрдЯрд╛рдЗрд▓ рд╡рд╛рд▓реЗ рдШрдЯрдХ рдЖрдкрдХреЛ MuiThemeProvider рдХреЗ рдЕрдВрджрд░ рдереАрдордкреНрд░реЛрд╡рд╛рдЗрдбрд░ рдХреЛ рдиреЗрд╕реНрдЯ рдХрд░рдХреЗ рдмреЙрдХреНрд╕ рдХреЗ рдмрд╛рд╣рд░ рдкреНрд░реЙрдкреНрд╕.рдереАрдо рддрдХ рдкрд╣реБрдВрдЪ рдкреНрд░рджрд╛рди рдХрд░рддреЗ рд╣реИрдВ, рдЬрдм рджреЛрдиреЛрдВ рдХреЛ рдереАрдо = {рдереАрдо} рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрд╣ рдЙрд╕ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдереАрдо рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░рддрд╛ рд╣реИ рдЬрд┐рд╕реЗ рдореБрдИ рдЙрдЬрд╛рдЧрд░ рдХрд░рддрд╛ рд╣реИ

//inline with HOC Method
 h1 style= {{ 'color: this.props.theme.palette.primary[500]' }}

//styled components ( no method necessary )
const Heading = styled.h1`
  color: ${p => p.theme.palette.primary['500']};
`

рдореБрдЭреЗ рдХреЗрд╡рд▓ рдлрд╝рдВрдХреНрд╢рди рдорд╛рдиреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдереА, рдЗрд╕рд▓рд┐рдП рдореИрдВрдиреЗ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛-рдЬреЗрдПрд╕рдПрд╕ ' injectSheet() рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ред рдореБрдЭреЗ рдореБрдИ рдХреЗ withStyles() рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рд╕реНрдЯрд╛рдЗрд▓ рдХреЗ рдмрдЬрд╛рдп рдЗрдВрдЬреЗрдХреНрд╢рдирд╢реАрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп рдХреЛрдИ рдХрдореА рд╣реИ?

@ рдбреЗрдорд┐рдпрди-рдореЛрдиреНрдиреА рдЖрдкрдХреЛ рдЕрдкрдиреЗ рдПрдордпреВрдЖрдИ рдереАрдо рддрдХ рдкрд╣реБрдВрдЪ рдирд╣реАрдВ рдорд┐рд▓рддреА рд╣реИред

рд╕рднреА рдХреЛ рдирдорд╕реНрдХрд╛рд░, рдореИрдВ рдХреЗрд╡рд▓ рд╕рд╛рдордЧреНрд░реА-рдпреВрдЖрдИ рд╢реИрд▓реА-рдШрдЯрдХреЛрдВ-рдЬреИрд╕реЗ рдПрдкреАрдЖрдИ рдХреЗ рдЕрдкрдиреЗ рд╕рдВрд╕реНрдХрд░рдг рдХреЛ рд╕рд╛рдЭрд╛ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛ред рдпрд╣ "рднрд╛рд░реА" рдкрд░реАрдХреНрд╖рдг рдирд╣реАрдВ рд╣реИ рд▓реЗрдХрд┐рди рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рдФрд░ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ:

  • рд╕реНрдЯрд╛рдЗрд▓ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд▓рд┐рдП props рдФрд░ theme рдлрд╣рд░рд╛рдпрд╛ред
  • рд▓рд┐рдкрдЯреЗ рдШрдЯрдХ рдХреЗ рд▓рд┐рдП рдХрд╕реНрдЯрдо props рдХрд░рдирд╛
  • React.forwardRef рдорд╛рдзреНрдпрдо рд╕реЗ рдЕрдЧреНрд░реЗрд╖рдг рд░реЗрдлрд░реА
    (рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВ: рд░реЗрдлрд░реА рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдХреЗрд╡рд▓ рдПрдЪрдЯреАрдПрдордПрд▓ рдЯреИрдЧ рдХреЗ рд▓рд┐рдП рдХрд╛рдо рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рдЕрдзрд┐рдХрд╛рдВрд╢ рдЖрдзрд╛рд░ рд╕рд╛рдордЧреНрд░реА-рдпреВрдЖрдИ рдШрдЯрдХреЛрдВ рдХреЗ рд▓рд┐рдП рдирд╣реАрдВ, рдЗрд╕рдХреЗ рд▓рд┐рдП рдЖрдВрддрд░рд┐рдХ рд╕рдорд░реНрдерди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдореЗрд░реЗ рдкрд╛рд╕ рд╕рдордп рд╣реЛрдиреЗ рдкрд░ рдкреАрдЖрд░ рдкрд░ рдХрд╛рдо рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рдЗрд╕рдХреЗ рд▓рд┐рдП function рдпрд╛ object рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреАред

рд╕рдВрдмрдВрдзрд┐рдд рдореБрджреНрджреЗ: #10825, #7633

рд╕реНрдЯрд╛рдЗрд▓.рдЬреЗрдПрд╕

import React, { Component } from 'react';
import classNames from 'classnames';
import PropTypes from 'prop-types';
import { withStyles } from 'material-ui/styles';

function styled(WrappedComponent, customProps) {
  return (style, options) => {
    class StyledComponent extends Component {
      render() {
        let {
          forwardRef,
          classes,
          className,
          ...passThroughProps
        } = this.props;
        return (
          <WrappedComponent
            ref={forwardRef}
            className={classNames(classes.root, className)}
            {...passThroughProps}
            {...customProps}
          />
        );
      }
    }

    StyledComponent.propTypes = {
      classes: PropTypes.object.isRequired,
      className: PropTypes.string,
    };

    let hoistedProps = {};

    const styles =
      typeof style === 'function'
        ? theme => {
            return { root: style({ ...theme, theme, props: hoistedProps }) };
          }
        : { root: style };

    const WithRef = withStyles(styles, options)(StyledComponent);

    return React.forwardRef((props, ref) => {
      hoistedProps = props;
      return <WithRef {...props} forwardRef={ref} />;
    });
  };
}

export default styled;

рдЙрджрд╛рд╣рд░рдг рдЙрдкрдпреЛрдЧ

const MobileNav = styled('nav')(({ theme, props }) => ({
  '&.pos-fixed': {
    top: 0,
    position: props.fixed ? 'fixed' : 'absolute',
    zIndex: 99,
    animation: 'fadeInDown 0.3s ease-out forwards',
    backgroundColor: theme.palette.common.white,
  },
}));

рдХрд╕реНрдЯрдо рд╕рд╣рд╛рд░рд╛ рдХреЗ рд╕рд╛рде

const StyledButton = styled(Button, { component: Link })(
  ({ theme, props }) => ({
    color: props.disabled ? 'gray' : 'blue',
    [theme.breakpoints.down('sm')]: {
      color: 'red',
    },
  })
);

@oliviertassinari рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдореИрдВ рдиреАрдЪреЗ рджрд┐рдП рдЧрдП рд╕рдорд╛рдзрд╛рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ:

    componentWillMount() {
        const {color} = this.props;
        jss.setup(jssPreset());
        const stylesheet = jss.createStyleSheet({
            underline: {
              "&:after": {
                backgroundColor: `${color} !important`
              }
            }
        }).attach();
        this.underlineClass = stylesheet.classes.underline;
    }

рдпрд╣ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рд▓реЗрдХрд┐рди рдХреНрдпрд╛ рдХреБрдЫ рд╕рдВрднрд╛рд╡рд┐рдд рдореБрджреНрджреЗ рд╣реИрдВ рдЬреЛ рдореИрдВ рдирд╣реАрдВ рджреЗрдЦ рд░рд╣рд╛ рд╣реВрдБ? рдореБрдЭреЗ рдпрд╣ рдкрд╕рдВрдж рдирд╣реАрдВ рд╣реИ рдХрд┐ рдореБрдЭреЗ рджреЛ рдмрд╛рд░ jss.setup рдХреЛ рдХреЙрд▓ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП ЁЯШЕред рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рдореИрдВ jss рдЬреАрд╡рдирдЪрдХреНрд░ рдХреЛ рд╕рдордЭрддрд╛ рд╣реВрдВред рдореБрдЭреЗ рдЖрд╢реНрдЪрд░реНрдп рд╣реБрдЖ рдХрд┐ рдореБрдЭреЗ рдпрд╣рд╛рдВ setup() рдХрд╛ рдЖрд╣реНрд╡рд╛рди рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдереАред

рдпрд╣ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рд▓реЗрдХрд┐рди рдХреНрдпрд╛ рдХреБрдЫ рд╕рдВрднрд╛рд╡рд┐рдд рдореБрджреНрджреЗ рд╣реИрдВ рдЬреЛ рдореИрдВ рдирд╣реАрдВ рджреЗрдЦ рд░рд╣рд╛ рд╣реВрдБ?

@wcandillon рдХреБрдЫ рд╕рдВрднрд╛рд╡рд┐рдд рдореБрджреНрджреЗ рдЬреЛ рдореИрдВ рджреЗрдЦ рд╕рдХрддрд╛ рд╣реВрдВ: 1. рдЖрдк рд╣рд░ рдмрд╛рд░ рдирдП рд╡рд░реНрдЧ рдХреЗ рдирд╛рдо рдЗрдВрдЬреЗрдХреНрдЯ рдХрд░реЗрдВрдЧреЗ рдЬрдм рдШрдЯрдХ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдЖрд░реЛрд╣рд┐рдд рд╣реЛред 2. рдЖрдк рдЕрдкрдиреЗ рдШрдЯрдХ рдХреЛ рд╕рд░реНрд╡рд░-рд╕рд╛рдЗрдб рд░реЗрдВрдбрд░ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдирд╣реАрдВ рд╣реЛрдВрдЧреЗред 3. рдЖрдкрдХреЛ рд╕рд╣реА CSS рдУрд╡рд░рд░рд╛рдЗрдб рдЗрдВрдЬреЗрдХреНрд╢рди рдСрд░реНрдбрд░ рдирд╣реАрдВ рдорд┐рд▓реЗрдЧрд╛ред

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

https://github.com/JacquesBonet/jss-material-ui

рдПрдХ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдкрд░ рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ рдкрд░реАрдХреНрд╖рдг рдХрд┐рдпрд╛ рдЧрдпрд╛ред

рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдореИрдВ рдбреЗрдирд┐рдпрд▓рдорд╣реЛрди рд╕рдорд╛рдзрд╛рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВ, рд▓реЗрдХрд┐рди рд╕реНрдЯрд╛рдЗрд▓ рдЗрдирд╣реЗрд░рд┐рдЯреЗрдВрд╕ рд╕рдорд╕реНрдпрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рддрд╛ рд╣реВрдВред

@oliviertassinari рдХреНрдпрд╛ рдЗрд╕ рд╕рдордп рдЧрддрд┐рд╢реАрд▓ рд╕реАрдПрд╕рдПрд╕/рдПрдиреАрдореЗрд╢рди рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рд╡реИрдХрд▓реНрдкрд┐рдХ рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╣реИ? рдзрдиреНрдпрд╡рд╛рдж :)

@HunderlineK рдХреБрдЫ рд╡рд┐рдХрд▓реНрдк: https://material-ui.com/customization/overrides/#2 -dynamic-variation-for-a-one-time-situationред

@danielmahon рдЖрдкрдХрд╛ рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╡рд╣реА рд╣реИ рдЬреЛ рдореИрдВ рдЕрднреА рдЕрдкрдиреА рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рджреЗрдЦ рд░рд╣рд╛ рд╣реВрдВ, рд╣рд╛рд▓рд╛рдВрдХрд┐ "рд╕реНрдЯрд╛рдЗрд▓ рдХрдВрдкреЛрдиреЗрдВрдЯ" рдирдП рдкреНрд░реЙрдкреНрд╕ рдкреНрд░рд╛рдкреНрдд рд╣реЛрдиреЗ рдкрд░ рдлрд┐рд░ рд╕реЗ рдкреНрд░рд╕реНрддреБрдд рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рдХреНрдпрд╛ рдЖрдкрдиреЗ рдХреБрдЫ рдФрд░ рдХреЛрд╢рд┐рд╢ рдХреА рд╣реИ?

рдореИрдВ рдХреБрдЫ рдЕрд▓рдЧ рд╕реЛрдЪреВрдВрдЧрд╛, рдФрд░ рдЕрдЧрд░ рдореИрдВ рдХреБрдЫ рд▓реЗрдХрд░ рдЖрддрд╛ рд╣реВрдВ рддреЛ рдореИрдВ рдЖрдкрдХреЛ рдмрддрд╛ рджреВрдВрдЧрд╛

ЁЯТ░ рдмрд╕ рдЙрд╕ рдкрд░ $50 рдХрд╛ рдЗрдирд╛рдо рд╕рдВрд▓рдЧреНрди рдХрд┐рдпрд╛ :)

https://www.bountysource.com/issues/47838203-withstyles-add-the-ability-to-get-the-component-s-props-from-within-the-style-object

рдЬреИрд╕реЗ @lewisdiamond рдиреЗ рдХрд╣рд╛, const styles = (props, theme) => ({}) рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╕рд╛рдл-рд╕реБрдерд░рд╛ рд╣реЛрдЧрд╛ред

рдпрд╛ const styles = (theme, props) => ({}) рдиреЙрди-рдмреНрд░реЗрдХрд┐рдВрдЧ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред

рдореИрдВ рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ v1.x рдореАрд▓ рдХреЗ рдкрддреНрдерд░ рдореЗрдВ рдЬреЛрдбрд╝ рд░рд╣рд╛ рд╣реВрдВред рдХрд╛рдлреА рд▓реЛрдЧ рдЗрд╕рдХреА рдорд╛рдВрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВред рд╣рдо рдЬрд▓реНрдж рд╣реА рдЙрд╕ рддрдХ рдкрд╣реБрдВрдЪреЗрдВрдЧреЗред

capture d ecran 2018-07-29 a 13 12 03

@oliviertassinari рд╢рд╛рдпрдж withStyles рдХреЗ рдЯрд╛рдЗрдкрд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдЗрд╕рдХрд╛ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдкреНрд░рднрд╛рд╡ рдкрдбрд╝рддрд╛ рд╣реИ, рдореБрдЭреЗ рдмрддрд╛рдПрдВ рдХрд┐ рдХреНрдпрд╛ рдореИрдВ рдЗрд╕рдореЗрдВ рдорджрдж рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ

@pelotom рдзрдиреНрдпрд╡рд╛рдж, рдореИрдВ рдЖрдкрдХреЛ

рдХреНрдпрд╛ рдЗрд╕ рд╕рдВрдмрдВрдз рдореЗрдВ рдХрд╛рд░реНрдп рдкреНрд░рдЧрддрд┐ рдкрд░ рд╣реИ? рдпрд╣ рдЖрдИрдПрдордУ рдХреА рдПрдХ рдкреНрд░рдореБрдЦ рд╡рд┐рд╢реЗрд╖рддрд╛ рд╣реИ, рд╢рд╛рдпрдж рдореИрдВ рдЗрд╕рдХреЗ рд╕рд╛рде рдорджрдж рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВред

рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВ: рдореИрдВрдиреЗ рдЗрд╕ рдкрд░ рдХрд╛рдо рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░ рджрд┐рдпрд╛ред styles рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдкреНрд░реЙрдкреНрд╕ рдкрд╛рд╕ рдХрд░рдиреЗ рдореЗрдВ рдкреНрд░рдмрдВрдзрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬрд┐рд╕реЗ withStyles рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддрд╛ рд╣реИ, рдХреЗрд╡рд▓ рд╕рдорд╕реНрдпрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдкреНрд░реЛрдк рдмрджрд▓рддреЗ рд╕рдордп рд╢реИрд▓рд┐рдпреЛрдВ рдХреЛ рдЕрдкрдбреЗрдЯ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЗрд╕рдХрд╛ рд╕рдорд╛рдзрд╛рди рд╣реЛрдиреЗ рдкрд░ рдкреАрдЖрд░ рдмрдирд╛рдПрдВрдЧреЗред

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

const styles = theme => ({
  chip:{
  },
  separator: {
    marginRight: theme.spacing.unit,
  },
  fright: {
    float: 'right',
  },
  fleft: {
    float: 'left',
  },
  outlinedPrimary:{
    color: props =>  stringToColor( props.username),
    border: props => `1px solid ${fade(stringToColor(props.username), 0.5)}`,
    '$clickable&:hover, $clickable&:focus, $deletable&:focus': props => ({
      backgroundColor: fade(stringToColor(props.username), theme.palette.action.hoverOpacity),
      border: `1px solid ${stringToColor(props.username)}`,
      }),
  },
  outlined: {
    backgroundColor: 'transparent',
    border: props => `1px solid ${
      theme.palette.type === 'light' ? stringToColor(props.username) : fade(stringToColor(props.username))
    }`,
    '$clickable&:hover, $clickable&:focus, $deletable&:focus': props => ({
      backgroundColor: fade(stringToColor(props.username), theme.palette.action.hoverOpacity),
      }),
    },
});

рдЖрдк рдореЗрд░реЗ рд╕рдорд╛рдзрд╛рди рдЬреИрдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдХреА рдЬрд╛рдВрдЪ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ: https://github.com/JacquesBonet/jss-material-ui

рдзрдиреНрдпрд╡рд╛рдж, рдореИрдВ рдЗрд╕реЗ рджреЗрдЦ рд▓реВрдВрдЧрд╛ред

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

рдЪреЗрддрд╛рд╡рдиреА

рдпрд╣ рдШрдЯрдХ рдПрдХ рдкреВрд░реНрдг рд░рд┐рдорд╛рдЙрдВрдЯ рдХрд░реЗрдЧрд╛ рдпрджрд┐ рдкреНрд░реЙрдкреНрд╕ рд╕реНрдЯрд╛рдЗрд▓рд╢реАрдЯ рдХреНрд▓рд╛рд╕ рдХреЗ рдЗрдВрдбреЗрдХреНрд╕ рдирдВрдмрд░ рдХреЗ рд╕рд╛рде рдХреБрдЫ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рдмрджрд▓рддреЗ рд╣реИрдВ рдпрд╛ рд╕реНрдЯрд╛рдЗрд▓ рдПрдЪрдУрд╕реА рдореЗрдВ рдХреБрдЫ рдмрджрд▓рддреЗ рд╣реИрдВ

import React from 'react';
import { withStyles } from '@material-ui/core/styles';

const { createElement, forwardRef } = React

const withPropsStyles = ( style ) => {

    const withPropsStyles = ( component ) => {

        return forwardRef( (props, ref) => {

            const proxy = (theme) => style(props, theme)

            const hoc = withStyles(proxy)(component)

            return props.children ? 
                createElement(hoc, { ...props, ref}, props.children) :
                createElement(hoc, {...props, ref}) 
        }) 
    }

    return withPropsStyles
}

export default withPropsStyles

рдЙрджрд╛рд╣рд░рдг рдЙрдкрдпреЛрдЧ

const styles = (props, theme) => ({
    root:{
        backgroundColor: props.light ? theme.palette.primary.light : theme.palette.primary.main 
    },
})

const SomeComponent = ({classes}) => <div className={classes.root}/>

export default withPropsStyles(styles)(SomeComponent)

рдирд┐рд╖реНрдХрд░реНрд╖

рд╕рд░рд▓ рдФрд░ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ (рд▓реЗрдХрд┐рди рдкреВрд░реА рд░реАрдорд╛рдЙрдВрдЯ рд▓рд╛рдЧрдд рднреА рд░рд┐рдо рдХрд░реЗрдВ)

рдЗрд╕ рдкрд░рд┐рд╡рд░реНрддрди рдХреЗ рд╕рд╛рде рдХреНрдпрд╛ рд╣рдо рдкреБрд╕реНрддрдХрд╛рд▓рдп рд╕реЗ 100% JSS рдХреЗ рдкрдХреНрд╖ рдореЗрдВ рдЗрдирд▓рд╛рдЗрди рд╢реИрд▓реА рдХреЗ рдЙрдкрдпреЛрдЧ рдХреЛ рд╣рдЯрд╛ рд╕рдХрддреЗ рд╣реИрдВ? рдореЗрд░рд╛ рдРрдк рдЗрдирд▓рд╛рдЗрди рд╢реИрд▓рд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЬрдм рдореИрдВ рдЬреЗрдПрд╕рдПрд╕ рдХреЗ рд╕рд╛рде рд▓рд╣рд░ рдкреНрд░рднрд╛рд╡ рдХреЛ рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдЧрдпрд╛ рддреЛ рдореБрдЭреЗ рдПрд╣рд╕рд╛рд╕ рд╣реБрдЖ рдХрд┐ рдореБрдЭреЗ рдЗрд╕ рд╕реБрд╡рд┐рдзрд╛ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдПрдХ рдЫреЛрдЯрд╛ рдкреНрд░рджрд░реНрд╢рди рд╣рд┐рдЯ рд╣реЛ, рд▓реЗрдХрд┐рди рдХреНрд▓реАрдирд░ рд▓рдЧрддрд╛ рд╣реИред

@koshea рдЗрдирд▓рд╛рдЗрди рд╢реИрд▓реА рдХреЛ withStyles рдХреЗ рд▓рд┐рдП рдПрдХ рдбреЗрдХреЛрд░реЗрдЯрд░ рдХреЗ рд░реВрдк рдореЗрдВ рдпрд╛ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд░реВрдк рдореЗрдВ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрди рдореЗрдВ рдПрдХ рдмреВрдВрдж рдХреЗ рд░реВрдк рдореЗрдВ рдареАрдХ рдХрд╛рдо рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред

рдореИрдВ рдпрд╣ рднреА рдЙрд▓реНрд▓реЗрдЦ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛ рдХрд┐ рдЗрдирд▓рд╛рдЗрди рд╢реИрд▓рд┐рдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдордЬрдмреВрдд рд╕рд╛рдордЧреНрд░реА рд╕реБрд░рдХреНрд╖рд╛ рдиреАрддрд┐ рдХреЛ рд╕рдХреНрд╖рдо рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рджреЗрддрд╛ рд╣реИред
рдЗрд╕реЗ рд╕реНрдЯрд╛рдЗрд▓ рдирд┐рд░реНрджреЗрд╢реЛрдВ рдореЗрдВ unsafe-inline рдзреНрд╡рдЬ рдЬреЛрдбрд╝рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдЬреЛ рд╕реБрд░рдХреНрд╖рд┐рдд рдирд╣реАрдВ рд╣реИред

рдкреНрд░реЙрдкреНрд╕ рд╕рдкреЛрд░реНрдЯ рд╡рд╛рд▓реА рдбрд╛рдпрдиреЗрдорд┐рдХ рд╕реНрдЯрд╛рдЗрд▓ рдХреЛ рдЙрд╕ рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рдорд╛рдзрд╛рди рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП

рдирдорд╕реНрддреЗ рджреЛрд╕реНрддреЛрдВ, "рдмрд╕ рдЗрд╕реА рддрд░рд╣" рдЪрд░реНрдЪрд╛ рдореЗрдВ рдХреВрджрдиреЗ рдХреЗ рд▓рд┐рдП рдЦреЗрдж рд╣реИред рдореИрдВрдиреЗ рд╣рд╛рд▓ рд╣реА рдореЗрдВ рдореБрдИ (рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рд╕рд╛рде) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд┐рдпрд╛ рд╣реИ рдФрд░ рдЬрдм рддрдХ рдореБрдЭреЗ рдпрд╣ рдПрдХ рдЕрддреНрдпрдВрдд рд╢рдХреНрддрд┐рд╢рд╛рд▓реА рдкреБрд╕реНрддрдХрд╛рд▓рдп рд▓рдЧрддрд╛ рд╣реИ, рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдЗрд╕рдХреА рдЬрдЯрд┐рд▓рддрд╛рдПрдВ рд╣реИрдВред

рдореИрдВрдиреЗ рдКрдкрд░ рдХреБрдЫ рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдореЗрдВ рджреЗрдЦрд╛ рд╣реИ рдХрд┐ рдЗрд╕ рдмрд╛рдд рдкрд░ рдереЛрдбрд╝реА рдЪрд░реНрдЪрд╛ рд╣реИ рдХрд┐ рдХреНрдпрд╛ рдпрд╣ рд╕реБрд╡рд┐рдзрд╛ (props, theme) => {} рдпрд╛ (theme, props) => {} рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдПред рдореИрдВ рдЕрдкрдиреА рдЯрд┐рдкреНрдкрдгреА рдореЗрдВ props рдФрд░ theme рдирд╛рдорд┐рдд рд╕рдВрдкрддреНрддрд┐рдпреЛрдВ рдХреЛ рдмрдирд╛рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ @pelotom рдиреЗ рдЬреЛ рдХрд╣рд╛, рдЙрд╕реЗ рд╕реБрджреГрдврд╝ рдХрд░рдирд╛

рдзреИрд░реНрдп рдХреЗ рд▓рд┐рдП рд╕рднреА рдХреЛ рдзрдиреНрдпрд╡рд╛рдж! #13503 рдореЗрдВ рдЗрд╕ рдореБрджреНрджреЗ рдкрд░ рдзреНрдпрд╛рди рджрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИред рдпрд╣ рдШрдЯрдХ рд╕рд╣рд╛рдпрдХреЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдЬрд┐рд╕реЗ рд╣рдо рд▓рд╛рдЧреВ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред рд╣рдордиреЗ рд╣реБрдХ рдПрдкреАрдЖрдИ рдХреЗ рд╕рд╛рде рднреА рдкреНрд░рдпреЛрдЧ рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░ рджрд┐рдпрд╛ рд╣реИ: https://twitter.com/olivtassinari/status/1058805751404261376ред

рдХреНрдпрд╛ рдЗрд╕рдиреЗ рдЗрд╕реЗ 4.0 рдореЗрдВ рдмрдирд╛рдпрд╛? рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ makeStyles рдХреЙрд▓рдмреИрдХ рдореЗрдВ props рдкреИрд░рд╛рдореАрдЯрд░ рдирд╣реАрдВ рд╣реИред

@ рд╢рд╣рд░41 const classes = useStyles(props);

рдЕрдЪреНрдЫрд╛ рдРрд╕рд╛ рд╣реИред рддреЛ рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ

const useStyles = makeStyles(theme => {
    return {
        foo: {
            color: theme.props.danger ? '#ff0000' : '#00ff00'
        }
    };
});

function MyComponent(props) {
    const classes = useStyles(props);

    return <div className={classes.foo}>...</div>;
}

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

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

import React from 'react';
import { Button, Theme, makeStyles } from '@material-ui/core';

interface ButtonProps {
    destructive: boolean;
}

const useButtonStyles = makeStyles<Theme, ButtonProps>(theme => {
    return {
        root: props => ({
            backgroundColor: props.destructive ? theme.palette.error.main : theme.palette.primary.main
        })
    };
});

export const PrimaryButton: React.FunctionComponent<ButtonProps> = props => {
    const classes = useButtonStyles(props);

    return <Button {...props} className={classes.root} variant="contained" />;
};

рдореИрдВ рдмрд╛рд╣рд░реА рд╢реИрд▓рд┐рдпреЛрдВ рдЬреЗрд╕рди рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдкреНрд░реЛрдк рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреИрд╕реЗ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ?

рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдпрд╣ рдмрд╛рд╣рд░реА рдлрд╝рд╛рдЗрд▓ рд╣реИ

const typographyStyle = {
  title2: {
    fontFamily:"Montserrat",
    fontStyle:"normal",
    fontWeight:"800",
    fontSize:"72px",
    lineHeight:"88px",
    letterSpacing:"-0.02em",
    // color:"#304C82"
    color : props => {
      console.log(props,'c1');
      return props.color
    }

  }
};

export default typographyStyle;

рдореИрдВ рдЗрд╕ рдлрд╝рд╛рдЗрд▓ рдХреЛ рдЖрдпрд╛рдд рдХрд░рддрд╛ рд╣реВрдБ рдФрд░ рд╡рд╕реНрддреБ рдХреЛ рдлреИрд▓рд╛рддрд╛ рд╣реВрдБ

import typographyStyle from "../assets/jss/material-kit-pro-react/views/componentsSections/typographyStyle";


const styles = theme =>  ({
    ...typographyStyle,
    homeSearch:{
        width: '100%',
        '& div':{
            '& input':{
                "color":"#304C82",
                height: 65,
                fontFamily: 'Open Sans',
                fontStyle: 'normal',
                fontWeight: 800,
                fontSize: '48px',
                lineHeight: '65px',
                letterSpacing: '-0.03em',
                '&::placeholder':{
                    fontFamily: 'Open Sans',
                    fontStyle: 'normal',
                    fontWeight: 800,
                    fontSize: '48px',
                    lineHeight: '65px',
                    letterSpacing: '-0.03em',
                    color: '#EAEAEA'
                }
            }
        }
    },

  });

рдЕрдм рдХрд▓рд░ рдлрдВрдХреНрд╢рди рдкрд░ рдореБрдЭреЗ рдкреНрд░реЙрдкреНрд╕ = {} рдорд┐рд▓рддрд╛ рд╣реИред

рдХреНрдпрд╛ рдХреЛрдИ рдЗрд╕ рд╕рдВрдмрдВрдз рдореЗрдВ рдореЗрд░реА рдорджрдж рдХрд░ рд╕рдХрддрд╛ рд╣реИ?

рдЕрдкрдбреЗрдЯ рдХрд░реЗрдВ:

рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдореИрдВ рдХреБрдЫ рдЧрд▓рдд рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рдХреНрдпреЛрдВрдХрд┐ рдореБрдЭреЗ рдЕрдкрдиреА рдореБрдЦреНрдп рд╢реИрд▓рд┐рдпреЛрдВ рдореЗрдВ рднреА рдЦрд╛рд▓реА рд╡рд╕реНрддреБ рдорд┐рд▓ рд░рд╣реА рд╣реИред рдЬреЗрдПрд╕ рдлрд╝рд╛рдЗрд▓

    homeSearch: props => {
        console.log(props);
        return {
        width: '100%',
        border:  `1px solid ${props.color}`
        ,
        '& div':{
            '& input':{
                "color":"#304C82",
                height: 65,
                fontFamily: 'Open Sans',
                fontStyle: 'normal',
                fontWeight: 800,
                fontSize: '48px',
                lineHeight: '65px',
                letterSpacing: '-0.03em',
                '&::placeholder':{
                    fontFamily: 'Open Sans',
                    fontStyle: 'normal',
                    fontWeight: 800,
                    fontSize: '48px',
                    lineHeight: '65px',
                    letterSpacing: '-0.03em',
                    color: '#EAEAEA'
                }
            }
        }
    }
},
рдХреНрдпрд╛ рдпрд╣ рдкреГрд╖реНрда рдЙрдкрдпреЛрдЧреА рдерд╛?
0 / 5 - 0 рд░реЗрдЯрд┐рдВрдЧреНрд╕

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

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

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

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

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

chris-hinds picture chris-hinds  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ