Material-ui: ํ”„๋กœ๋•์…˜ ๋นŒ๋“œ-ํด๋ž˜์Šค ์ด๋ฆ„ ์ถฉ๋Œ

์— ๋งŒ๋“  2017๋…„ 09์›” 15์ผ  ยท  62์ฝ”๋ฉ˜ํŠธ  ยท  ์ถœ์ฒ˜: mui-org/material-ui


css ํด๋ž˜์Šค ์ด๋ฆ„ ์ •์˜๋Š” ์ผ๋ถ€ ๊ตฌ์„ฑ ์š”์†Œ์— ๋Œ€ํ•ด ์ค‘๋ณต๋ฉ๋‹ˆ๋‹ค. ์ œ ๊ฒฝ์šฐ์—๋Š” MuiIconButton ๋ฐ MuiModal ๋Œ€ํ•ด ์ค‘๋ณต๋ฉ๋‹ˆ๋‹ค (๋‚ด ๋””๋ฒ„๊น…์—์„œ ์ถ”์ธก)-ํ˜„์žฌ ๋™์ž‘ ํ™•์ธ

  • [x]์ด ์ €์žฅ์†Œ์˜ ๋ฌธ์ œ ๋ฅผ ๊ฒ€์ƒ‰ํ–ˆ์œผ๋ฉฐ ์ด๊ฒƒ์ด ์ค‘๋ณต์ด ์•„๋‹ˆ๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

์˜ˆ์ƒ๋˜๋Š” ๋™์ž‘

ํด๋ž˜์Šค ์ด๋ฆ„์€ ๊ตฌ์„ฑ ์š”์†Œ๊ฐ„์— ์ค‘๋ณต๋˜์ง€ ์•Š์•„์•ผํ•ฉ๋‹ˆ๋‹ค.

ํ˜„์žฌ ํ–‰๋™

๋‚ด ๋ฒ„ํŠผ ์Šคํƒ€์ผ :
classnames_conflict
ํด๋ž˜์Šค๊ฐ€ ์ค‘๋ณต๋ฉ๋‹ˆ๋‹ค.
์Šคํƒ€์ผ ์ •์˜ :
classnames_conflit_2

๊ฐœ๋ฐœ ๋ชจ๋“œ์—์„œ ์ž‘๋™ ์ค‘์ž…๋‹ˆ๋‹ค.
๋‚ด ๋ฒ„ํŠผ ์Šคํƒ€์ผ :
development_class

์ •์˜๋ฅผ ์ฐพ์•˜์Šต๋‹ˆ๋‹ค.
mui-icon-button-dev

๋ชจ๋‹ฌ์—์„œ :
mui-modal-dev

์žฌํ˜„ ๋‹จ๊ณ„ (๋ฒ„๊ทธ ์šฉ)

๋ฌธ์ œ๋ฅผ ์žฌํ˜„ ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ™˜๊ฒฝ์„ ์ค€๋น„ ํ•  ์ˆ˜ ์žˆ์ง€๋งŒ ์ง€๊ธˆ์€ ์—ฌ๊ธฐ์—๋ณด๊ณ ํ•˜๊ณ  ์‹ถ์—ˆ์Šต๋‹ˆ๋‹ค.

๋ฌธ๋งฅ


ํ”„๋กœ๋•์…˜ ํ™˜๊ฒฝ์—์„œ ๋‚ด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์ถœ์‹œํ•˜๋ ค๊ณ ํ•ฉ๋‹ˆ๋‹ค.

๋‹น์‹ ์˜ ํ™˜๊ฒฝ

| ๊ธฐ์ˆ  | ๋ฒ„์ „ |
| -------------- | --------- |
| Material-UI | 1.0.0-beta.10 |
| ๋ฐ˜์‘ | 15.6.1 |
| ๋ธŒ๋ผ์šฐ์ € | ๋ชจ๋“  |
| ์›นํŒฉ | ^ 3.3.0 |

๋ฌธ์ œ๊ฐ€ ๋  ์ˆ˜์žˆ๋Š” ํžŒํŠธ๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ์–ด๋””์—์„œ๋‚˜ withStyles ์†”๋ฃจ์…˜์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์Šคํƒ€์ผ ์žฌ์ •์˜์— ์Šคํƒ€์ผ ๊ตฌ์„ฑ ์š”์†Œ๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

bug ๐Ÿ›

๊ฐ€์žฅ ์œ ์šฉํ•œ ๋Œ“๊ธ€

์ถฉ๋Œํ•˜๋Š” ํด๋ž˜์Šค ์ด๋ฆ„์ด ์žˆ๊ณ  createGenerateClassName ์˜ต์…˜์— ์ ‘๋‘์‚ฌ๋ฅผ ์ถ”๊ฐ€ํ•˜๋ฉด ๋ฌธ์ œ๊ฐ€ ํ•ด๊ฒฐ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

์—ฌ๊ธฐ ์—์„œ ํ›Œ๋ฅญํ•˜๊ณ  ํฌ๊ด„์  ์ธ ๋ฌธ์„œ๋ฅผ ์‚ฌ์šฉ

๋ชจ๋“  62 ๋Œ“๊ธ€

์ด ๋ฌธ์ œ์— ๋Œ€ํ•œ ๋ช‡ ๊ฐ€์ง€ ๋ฌธ์ œ๋ฅผ ์ด๋ฏธ ๋ณด์•˜์Šต๋‹ˆ๋‹ค. ํ•ญ์ƒ ์ค‘๋ณต ๋œ className ์ƒ์„ฑ๊ธฐ ์ธ์Šคํ„ด์Šค์— ์—ฐ๊ฒฐ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๋‚˜๋Š” ๋ฒˆ์‹ ์—†์ด๋Š” ๋” ์ด์ƒ ๋„์šธ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

์ง€๊ธˆ์€ ์‹คํ–‰ ๋ถˆ๊ฐ€๋Šฅํ•œ ๋ฌธ์ œ๋กœ ํ•ด๊ฒฐํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. ๋ณต์ œ ์‚ฌ๋ก€๊ฐ€ ์žˆ์œผ๋ฉด ์•Œ๋ ค์ฃผ์„ธ์š”.

@oliviertassinari ๋ฌธ์ œ๋ฅผ ์žฌํ˜„ ํ•  ์ˆ˜์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์— ์›นํŒฉ ๋นˆ์ž…๋‹ˆ๋‹ค - https://www.webpackbin.com/bins/-KuO6ia3h-JDpBOJncZ3

์ œ ๊ฒฝ์šฐ์—๋Š” 2 ๊ฐœ์˜ ๋‹ค๋ฅธ div์— ๋…๋ฆฝ์ ์œผ๋กœ ๋งˆ์šดํŠธ ๋œ 2 ๊ฐœ์˜ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋ฃจํŠธ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ๋‘˜ ๋‹ค _jss_์—์„œ insertionPoint ๋ฅผ ์žฌ์ •์˜ํ•˜๊ธฐ ์œ„ํ•ด JssProvider ๋กœ ๋ž˜ํ•‘ ๋œ ๋™์ผํ•œ ์žฌ์งˆ UI ThemeProvider insertionPoint ๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

generate_classnames_counter

createGenerateClassName ํ•จ์ˆ˜๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ์นด์šดํ„ฐ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ณ ์œ  ํ•œ ํด๋ž˜์Šค ์ด๋ฆ„์„ ๊ฐ–์Šต๋‹ˆ๋‹ค.

export default function createGenerateClassName(): generateClassName {
  let ruleCounter = 0;

  return (rule: Rule, sheet?: StyleSheet): string => {
    ruleCounter += 1;
    warning(
      ruleCounter < 1e10,
      [
        'Material-UI: you might have a memory leak.',
        'The ruleCounter is not supposed to grow that much.',
      ].join(''),
    );

    if (process.env.NODE_ENV === 'production') {
      return `c${ruleCounter}`;
    }

    if (sheet && sheet.options.meta) {
      return `${sheet.options.meta}-${rule.key}-${ruleCounter}`;
    }

    return `${rule.key}-${ruleCounter}`;
  };
}

๊ทธ๋ฆฌ๊ณ  ๋‚ด ์Šคํฌ๋ฆฐ ์ƒท์€ ์–ด๋–ค ์ด์œ ๋กœ ์นด์šดํ„ฐ๊ฐ€ ๋ณต์ œ๋˜์—ˆ์Œ์„ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.

๋„์›€์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ๋‚˜๋Š” ์ง€๊ธˆ ๋‚ด๊ฐ€ ๋ญ˜ ์ž˜๋ชปํ•˜๊ณ  ์žˆ๋Š”์ง€ ๋ชจ๋ฅด๊ฒ ๋‹ค.

@darkowic ์„œ๋กœ ๋‹ค๋ฅธ ๋ฐ˜์‘ ํŠธ๋ฆฌ๊ฐ„์— jss ์ธ์Šคํ„ด์Šค๋ฅผ ๊ณต์œ ํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค. ๋‹น์‹ ์€ ๊ทธ๋Ÿฌํ•œ ๋ณ€ํ™”์— ๋Šฅ์ˆ™ํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค.

@oliviertassinari ์ œ ์‚ฌ์šฉ์ž ์ •์˜ ThemeProvider

  <JssProvider registry={context.sheetsRegistry} jss={context.jss}>
    <MuiThemeProvider
      theme={context.theme}
      sheetManage={context.sheetsManager}
      {...props}
    />
  </JssProvider>

๋‚˜๋Š” ์ด๊ฒƒ์œผ๋กœ ๋ชจ๋“  ๋ฐ˜์‘ ํŠธ๋ฆฌ๋ฅผ ๊ฐ์‹ผ๋‹ค.

์ด ๋ฌธ์ œ๋ฅผ ์—ด์–ด์•ผํ•ฉ๋‹ˆ๋‹ค.

๋ฌผ๋ก ์ž…๋‹ˆ๋‹ค. ์ง€๊ธˆ๊นŒ์ง€ ์•Œ๊ณ ์žˆ๋Š” ๊ฒƒ์„ ์š”์•ฝ ํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. ์ด ๋ฌธ์ œ๋Š” ๋‹ค์ค‘ ๋ฐ˜์‘ ๋ Œ๋”๋ง ํŠธ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์ฆ‰์‹œ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. jss ๊ณต๊ธ‰์ž๋Š” ๊ฐ ํŠธ๋ฆฌ์— ๋Œ€ํ•ด ํ•˜๋‚˜์”ฉ ๋‘ ๊ฐœ์˜ ํด๋ž˜์Šค ์ด๋ฆ„ ์ƒ์„ฑ๊ธฐ๋ฅผ ๋งŒ๋“ค ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์šฐ๋ฆฌ๋Š” ํด๋ž˜์Šค ์ด๋ฆ„ ์ถฉ๋Œ๋กœ ๋๋‚ฉ๋‹ˆ๋‹ค.
@kof ํด๋ž˜์Šค ์ด๋ฆ„ ์ƒ์„ฑ๊ธฐ๋ฅผ ํ—ˆ์šฉํ•˜๊ธฐ ์œ„ํ•ด react-jss ์—์„œ JssProvider๋ฅผ ํ™•์žฅํ•ด์•ผํ•ฉ๋‹ˆ๊นŒ?

ํด๋ผ์ด์–ธํŠธ ์ธก ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์— ๋Œ€ํ•œ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ• : ๊ณ ์œ  ํ•œ createGenerateClassName ๋งŒ๋“ค๊ณ  ruleCounter ๋ž˜ํผ ํ•จ์ˆ˜ ์™ธ๋ถ€๋กœ ์ด๋™ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

import warning from 'warning';

// Returns a function which generates unique class names based on counters.
// When new generator function is created, rule counter is reset.
// We need to reset the rule counter for SSR for each request.
//
// It's an improved version of
// https://github.com/cssinjs/jss/blob/4e6a05dd3f7b6572fdd3ab216861d9e446c20331/src/utils/createGenerateClassName.js
//
// Copied from material-ui due to issue https://github.com/callemall/material-ui/issues/8223

// This counter is moved outside from `createGenerateClassName` to solve the issue
let ruleCounter = 0;

export default function createGenerateClassName() {
  return (rule, sheet) => {
    ruleCounter += 1;
    warning(
      ruleCounter < 1e10,
      [
        'Material-UI: you might have a memory leak.',
        'The ruleCounter is not supposed to grow that much.'
      ].join('')
    );

    if (process.env.NODE_ENV === 'production') {
      return `c${ruleCounter}`;
    }

    if (sheet && sheet.options.meta) {
      return `${sheet.options.meta}-${rule.key}-${ruleCounter}`;
    }

    return `${rule.key}-${ruleCounter}`;
  };
}

์ข‹์€ ๊ฒƒ, ์šฐ๋ฆฌ๋Š” ์„œ๋ฒ„์—์„œ ๊ทธ๋Ÿฌํ•œ ์‚ฌ์šฉ ์‚ฌ๋ก€๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ์—ˆ๊ณ  ์ด๋ฏธ ๋ฌธ์„œ์—์„œ ๋Œ€๋‹ดํ•œ ํžŒํŠธ๋ฅผ ๊ณ„ํšํ•˜๊ณ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. # 5 ์ฐธ์กฐ

๊ทธ๋Ÿฌ๋‚˜ ์ด์ œ ์‹ค์ œ๋กœ 2 ๊ฐœ์˜ ๋ณ‘๋ ฌ ์‹คํ–‰ ๊ณต๊ธ‰์ž๋ฅผ ์ง€์›ํ•  ์ข‹์€ ์ด์œ ๋ฅผ ์ฐพ์•˜์Šต๋‹ˆ๋‹ค.

์—ฌ๋Ÿฌ ๊ฐœ์˜ ๋ณ‘๋ ฌ JssProvider๊ฐ€ ํ•„์š”๋กœํ•˜๋Š” ์‚ฌ์šฉ ์‚ฌ๋ก€๊ฐ€ ์žˆ๋Š”์ง€ ์กฐ์‚ฌํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค. ๋งŒ์•ฝ ์žˆ๋‹ค๋ฉด ๊ทธ๊ฒƒ์„ ์ง€์›ํ•  ๋ฌด์–ธ๊ฐ€๋ฅผ ์ƒ๊ฐํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค.

@kof ํด๋ผ์ด์–ธํŠธ ์ธก์—์„œ ์—ฌ๋Ÿฌ ๋ณ‘๋ ฌ JssProvider์— ๋Œ€ํ•œ ์‚ฌ์šฉ ์‚ฌ๋ก€๋ฅผ ๋ฐฉ๊ธˆ ์ฐพ์•˜์Šต๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์ œ์•ˆ ๋œ ์†”๋ฃจ์…˜์€ ๊ตฌํ˜„์ด ๊ฐ„๋‹จํ•˜๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. :).

๋ž˜ํผ ํ•จ์ˆ˜ ์™ธ๋ถ€๋กœ ruleCounter ์ด๋™

์ด๊ฒƒ์€ ์„œ๋ฒ„์—์„œ ruleCounter๊ฐ€ ์žฌ์„ค์ •๋˜์ง€ ์•Š์Œ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

์„œ๋ฒ„ ์ธก์—์„œ JssProviders๋Š” ๋ฐ˜๋“œ์‹œ ๋ฐ˜์‘ ํŠธ๋ฆฌ์˜ ๋™์‹œ ๋น„๋™๊ธฐ ๋ Œ๋”๋ง์„ ์ง€์›ํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค (๊ฐ•๋ ฅํ•œ ํ•„์š”). ๊ทธ๋Ÿฌ๋‚˜ ํ˜„์žฌ ๊ตฌํ˜„์—์„œ๋Š” ์ด๋ฏธ ์ง€์›๋ฉ๋‹ˆ๋‹ค. :)

@darkowic ๊ธฐ๋ณธ ์Šคํƒ์— ๋Œ€ํ•œ ์•ก์„ธ์Šค ๊ถŒํ•œ์ด์—†๋Š” ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์„ ์ œ์•ˆํ–ˆ์Šต๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š”ํ•˜๋‹ค. ์ด ์ถ”๊ฐ€ ์œ ์—ฐ์„ฑ์œผ๋กœ ๋” ์ž˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํด๋ž˜์Šค ์ด๋ฆ„ ์ƒ์„ฑ๊ธฐ ์ธ์Šคํ„ด์Šค๋ฅผ ํ—ˆ์šฉํ•ฉ๋‹ˆ๋‹ค.

๋˜ํ•œ ๋™์ผํ•œ ์—”๋“œ ํฌ์ธํŠธ์— ๋Œ€ํ•œ ์š”์ฒญ์€ ํ•ญ์ƒ ๋™์ผํ•œ ํด๋ž˜์Šค ์ด๋ฆ„์œผ๋กœ ์‘๋‹ตํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค.

@kof ํด๋ž˜์Šค ์ด๋ฆ„ ์ƒ์„ฑ๊ธฐ๋ฅผ ๋ฐ›์•„๋“ค์ด ๊ธฐ ์œ„ํ•ด react-jss์—์„œ JssProvider๋ฅผ ํ™•์žฅํ•ด์•ผํ•ฉ๋‹ˆ๊นŒ?

  1. ๋„ค ๊ฐ€๋Šฅํ•œ ํ•œ ๊ฐ€์ง€ ๋ฐฉ๋ฒ•์€ JssProvider๊ฐ€ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ํด๋ž˜์Šค ์ด๋ฆ„ ์ƒ์„ฑ๊ธฐ๋ฅผ ํ—ˆ์šฉํ•˜๋„๋ก ํ—ˆ์šฉํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.
import {createGenerateClassName} from 'react-jss'

const generateClassName = createGenerateClassName()

<JssProvider generateClassName={generateClassName}>
  <App1 />
</JssProvider>

<JssProvider generateClassName={generateClassName}>
  <App2 />
</JssProvider>

  1. ๋˜ ๋‹ค๋ฅธ ๊ฐ€๋Šฅํ•œ ์˜ต์…˜์€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ด๋ฆ„๊ณผ ๊ฐ™์€ ์ ‘๋‘์‚ฌ๋ฅผ ์ œ๊ณตํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์˜ˆ์ธกํ•  ์ˆ˜์—†๋Š” ์–‘์˜ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ์—†๋‹ค๊ณ  ๊ฐ€์ •ํ•˜๋ฉด ์ž‘๋™ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
<JssProvider classNamePrefix="app-1">
  <App1 />
</JssProvider>

<JssProvider classNamePrefix="app-2">
  <App2 />
</JssProvider>

์žฅ์  1 :

  • ์‚ฌ์šฉ์ž๋Š” ์ ‘๋‘์‚ฌ๋ฅผ ์ œ๊ณต ํ•  ํ•„์š”๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค.

ํ”„๋กœ 2 :

  • ์‚ฌ์šฉ์ž๋Š” ๊ฐœ๋ฐœ ์ค‘์— ์•ฑ์„ ์‹๋ณ„ํ•˜๋Š” DOM ํด๋ž˜์Šค ์ด๋ฆ„์— ์˜๋ฏธ์žˆ๋Š” ๊ฒƒ์„ ๊ฐ€์งˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ์‚ฌ์šฉ์ž๋Š” ์ ‘๋‘์‚ฌ์— ๋Œ€ํ•ด ๋” ๋งŽ์€ ์ œ์–ด ๊ถŒํ•œ์„ ๊ฐ–์Šต๋‹ˆ๋‹ค.
  • ์ถฉ๋Œํ•˜์ง€ ์•Š๋Š” ์ ‘๋‘์‚ฌ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์€ ๋น„๊ต์  ์‰ฝ์Šต๋‹ˆ๋‹ค. ํ•˜์œ„ ํŠธ๋ฆฌ๊ฐ€ ๋ช‡ ๊ฐœ๋งŒ ์žˆ๊ณ  ์ด๋ฆ„ ์ง€์ •์ด ์ด๋ฏธ ์ถฉ๋ถ„ํžˆ ์‰ฌ์› ๊ฑฐ๋‚˜ ํ•ด๋‹น ์ด๋ฆ„์— ๊ณ ์œ  ํ•œ ๋ฒˆํ˜ธ ์ ‘๋‘์‚ฌ๋ฅผ ์ถ”๊ฐ€ํ•˜๊ณ  ๊ฐ ์š”์ฒญ์—์„œ ์žฌ์„ค์ • ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์‹ค์ œ๋กœ classNamePrefix ๋ฐ generateClassName ์†Œํ’ˆ์„ ๋ชจ๋‘ ๊ฐ–๋Š” ๊ฒƒ์ด ํ•ฉ๋ฆฌ์ ์ž…๋‹ˆ๋‹ค. ์ฒซ ๋ฒˆ์งธ๋Š” ๋””๋ฒ„๊น… ์šฉ์ด๊ณ  ๋‘ ๋ฒˆ์งธ๋Š” ํด๋ž˜์Šค ์ด๋ฆ„์˜ ์ž๋™ํ™” ๋œ ๊ณ ์œ ์„ฑ์ž…๋‹ˆ๋‹ค.

https://github.com/facebookincubator/create-react-app/issues/3173 (๋ฐ ์—ฐ๊ฒฐ๋œ ์ถ•์†Œ ๋œ ํ…Œ์ŠคํŠธ ์‚ฌ๋ก€ )์„ ํ†ตํ•ด์ด ๋ฌธ์ œ์— ์ง๋ฉดํ–ˆ์Šต๋‹ˆ๋‹ค.

์ œ ๊ฒฝ์šฐ์—๋Š” material-ui (๋™์ผํ•œ ๋ฒ„์ „)๋„ ์‚ฌ์šฉ ํ•˜๋Š” ์•ฑ์— ์†Œ์žฌ UI ์ข…์† ๊ตฌ์„ฑ ์š”์†Œ (v1.0.0-beta.11)๊ฐ€ ํฌํ•จ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๊ฐœ๋ฐœ ์ค‘์—๋Š” ์ œ๋Œ€๋กœ ์ž‘๋™ํ•˜์ง€๋งŒ ํ”„๋กœ๋•์…˜์—์„œ๋Š” ํด๋ž˜์Šค ์ด๋ฆ„ ์ถฉ๋Œ๋กœ ์ธํ•ด ๋ ˆ์ด์•„์›ƒ์ด ์†์ƒ๋ฉ๋‹ˆ๋‹ค.

์ด๊ฒƒ์ด "๋‹ค์ค‘ ๋ฐ˜์‘ ๋ Œ๋”๋ง ํŠธ๋ฆฌ"์— ํ•ด๋‹นํ•˜๋Š”์ง€ ํ™•์‹คํ•˜์ง€ ์•Š๊ณ  var ruleCounter = 0; ์ด์ „์— createGenerateClassName() var ruleCounter = 0; ์ด๋™ํ•˜์—ฌ ๋ฌธ์ œ๋ฅผ _ ํ•ด๊ฒฐํ•˜์ง€ ๋ชปํ–ˆ์ง€๋งŒ _ ๋‹ค์Œ์„ ์ฃผ์„ ์ฒ˜๋ฆฌํ–ˆ์Šต๋‹ˆ๋‹ค. _did_ ์ž‘์—… :

https://github.com/callemall/material-ui/blob/2361339fd6df9bfbb85ed2ee4da9d42ee6fee71c/src/styles/createGenerateClassName.js#L26 -L28

์ฃ„์†กํ•ฉ๋‹ˆ๋‹ค. # 7855๋ฅผ ์—ด์—ˆ์„ ๋•Œ ๋” ๋งŽ์€ ์ •๋ณด๋ฅผ ์ œ๊ณต ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค .๐Ÿ˜Š
์ด ์˜๊ฒฌ์€ ๊ธฐ๋ณธ์ ์œผ๋กœ ํ”„๋กœ๋•์…˜ ๋นŒ๋“œ๋ฅผ ์‹คํ–‰ํ•  ๋•Œ ์ง๋ฉด ํ•œ ๋ฌธ์ œ๋ฅผ ๋‹ค๋ฃน๋‹ˆ๋‹ค.

ํŒŒ์ดํ”„ ๋ผ์ธ์—์„œ ์ด์— ๋Œ€ํ•œ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์€ ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?

react-jss https://github.com/cssinjs/react-jss/pull/155 ์—์„œ์ด๋ฅผ ์ˆ˜์ •ํ•ด์•ผํ•˜๋Š” PR์„ ๋งŒ๋“ค์—ˆ์Šต๋‹ˆ๋‹ค.

์š”์•ฝํ•˜์ž.

  • @darkowic ์˜ ๋ฌธ์ œ ๊ทผ๋ณธ ์›์ธ์€ https://github.com/callemall/material-ui/issues/8223#issuecomment -331076580์— ์„ค๋ช…๋˜์–ด ์žˆ์œผ๋ฉฐ @kof ์˜ PR : cssinjs / react-jss # ๋•๋ถ„์— ์ˆ˜์ • ๋  ์˜ˆ์ •์ž…๋‹ˆ๋‹ค. 155 ๋ฐ ํ–ฅํ›„ ์ด๋Ÿฌํ•œ ์ƒํ™ฉ์„ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•ด ์ƒˆ๋กœ์šด ๊ฒฝ๊ณ  : # 8341์ด ์ถ”๊ฐ€๋ฉ๋‹ˆ๋‹ค.

  • @tlvince ์˜ ๋ฌธ์ œ ์ฆ์ƒ์€ ๋™์ผํ•˜์ง€๋งŒ ๊ทผ๋ณธ ์›์ธ์ด ๋‹ค๋ฆ…๋‹ˆ๋‹ค. ๋‹จ์ผ ๋ฐ˜์‘ ๋ Œ๋” ํŠธ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์„ค์น˜๋œ ๋ณต์ œ ๋œ Material-UI ๋ฒ„์ „์— ์—ฐ๊ฒฐ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ฒฝ๊ณ ๋ฅผ ํ™•์ธํ•˜๊ณ  ์ •ํ™•ํžˆ ๋ฌด์Šจ ์ผ์ด ์ผ์–ด๋‚˜๊ณ  ์žˆ๋Š”์ง€ ํŒŒ์•…ํ•  ์ˆ˜ ์žˆ๋‹ค๋ฉด ๋‹ค๋ฅธ ๋ฌธ์ œ๋ฅผ์—ฌ์‹ญ์‹œ์˜ค.

  • @Robophil ์˜ ๋ฌธ์ œ๋Š” ์‹คํ–‰ํ•˜๊ธฐ์—๋Š” ๋„ˆ๋ฌด ๋ชจํ˜ธํ•ฉ๋‹ˆ๋‹ค.

์ถฉ๋Œํ•˜๋Š” ํด๋ž˜์Šค ์ด๋ฆ„์ด ์žˆ๊ณ  createGenerateClassName ์˜ต์…˜์— ์ ‘๋‘์‚ฌ๋ฅผ ์ถ”๊ฐ€ํ•˜๋ฉด ๋ฌธ์ œ๊ฐ€ ํ•ด๊ฒฐ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

์—ฌ๊ธฐ ์—์„œ ํ›Œ๋ฅญํ•˜๊ณ  ํฌ๊ด„์  ์ธ ๋ฌธ์„œ๋ฅผ ์‚ฌ์šฉ

@oliviertassinari ์š”์•ฝ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค!

๋‹จ์ผ ๋ฐ˜์‘ ๋ Œ๋” ํŠธ๋ฆฌ์—์„œ์ด ๋ฌธ์ œ๋Š” ๋นŒ๋“œ์˜ ๋‹ค๋ฅธ ์žฌ์งˆ UI ๋ฒ„์ „์œผ๋กœ ์ธํ•ด ๋ฐœ์ƒํ•  ๊ฐ€๋Šฅ์„ฑ์ด ํฝ๋‹ˆ๋‹ค. ์ข…์†์„ฑ ํŠธ๋ฆฌ๋ฅผ ํ™•์ธํ•˜๊ณ  ์‚ฌ์šฉ์ค‘์ธ material-ui ๋ฒ„์ „์„ ํ™•์ธํ•˜์‹ญ์‹œ์˜ค.

yarn list | grep material-ui

๋‚ด webpack ๊ตฌ์„ฑ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

module.exports = {
    entry: {
        FirstComp: path.join(paths.JS, '/components/FirstComponent/MyFirstComp.js'),
        SecondComp: path.join(paths.JS, '/components/SecondComponent/MySecondComp.js'),
    },
}

์ด ๋‘ ๊ฐ€์ง€ ๊ตฌ์„ฑ ์š”์†Œ์™€ splitChunks ์˜ต์…˜์„ ์‚ฌ์šฉํ•˜์—ฌ ๋นŒ๋“œ ๋œ ๊ณตํ†ต ๊ตฌ์„ฑ ์š”์†Œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.
JSSProvider๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ MyFirstComp ๋ฐ MySecondComp์—์„œ ๊ธฐ๋ณธ ๋‚ด ๋ณด๋‚ธ ๊ตฌ์„ฑ ์š”์†Œ๋ฅผ ๋ž˜ํ•‘ํ–ˆ์Šต๋‹ˆ๋‹ค.
๊ณตํ†ต ๊ตฌ์„ฑ ์š”์†Œ ์ฃผ๋ณ€์—์„œ JSSProvider๋ฅผ ์–ด๋–ป๊ฒŒ ์‚ฌ์šฉํ•ด์•ผํ•ฉ๋‹ˆ๊นŒ?

@Sewdn ๋‚˜๋Š” ๋˜ํ•œ ๋‹ค๋ฅธ material-ui ๋ฒ„์ „์œผ๋กœ ์ธํ•ด ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ์ด className ์ถฉ๋Œ ๋ฌธ์ œ๋Š” ์–ด์ œ 3.0.0-alpha.1์—์žˆ๋Š” @ material-ui / styles์—์„œ makeStyles ๊ฐ€ ๋งŒ๋“  ํ›„ํฌ ๋ฐ useStyles ํ›„ํฌ๋กœ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ํ•˜๊ธฐ ์‹œ์ž‘ํ–ˆ์„ ๋•Œ ๋‚ด ์•ฑ์—์„œ ๋„์ž…๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
๋˜ํ•œ 3.6.0 ์ธ "@ material-ui / core"๋ฅผ ์‚ฌ์šฉํ–ˆ์Šต๋‹ˆ๋‹ค.

๊ฐ‘์ž๊ธฐ ๋‚ด ์•ฑ ํด๋ž˜์Šค์™€ material-ui ํด๋ž˜์Šค๊ฐ€ ๋ชจ๋‘ jss1๋กœ ์‹œ์ž‘ํ•˜์—ฌ ๋ณ‘๋ ฌ๋กœ ๊ณ„์‚ฐ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๊ฒƒ์€ ๋ชจ๋“  ๊ฒƒ์„ ๋’ค์„ž์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด jss5๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋‚ด ํ—ค๋”๋Š” MuiListItem์„ ์˜ˆ๋กœ ๋“ค์–ด jss5๋กœ ์Šคํƒ€์ผ์„ ์ง€์ •ํ–ˆ์Šต๋‹ˆ๋‹ค.

์ด ์†”๋ฃจ์…˜์„ ๋”ฐ๋ผ https://github.com/mui-org/material-ui/issues/8223#issuecomment -412349569 @iamhosseindhv์— ์˜ํ•ด mui-components์˜ ํด๋ž˜์Šค์— ac ์ ‘๋‘์‚ฌ๊ฐ€ ๋ถ™๊ณ  ๋ฌธ์ œ๊ฐ€ ํ•ด๊ฒฐ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

@christiaanwesterbeek ์„ค์น˜ ๋‹จ๊ณ„๋ฅผ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๊นŒ? ์˜์กด์„ฑ ์ฃผ์ž…์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ๋ชจ๋“  ์ƒ์œ„ ๊ตฌ์„ฑ ์š”์†Œ๋ฅผ ๊ฐ€์ ธ ์˜ค๊ธฐ ์ „์— install() ํ˜ธ์ถœ์„ ์‹คํ–‰ํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค.

@oliviertassinari ๋‚˜๋Š” ๋‹น์‹ ์ด ์–ด๋–ค ๋‹จ๊ณ„๋ฅผ ์–ธ๊ธ‰ํ•˜๊ณ  ์žˆ๋Š”์ง€ ๋ชจ๋ฅด๊ฒ ์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ install() ์ด ๋ฌด์—‡์˜ ์ผ๋ถ€์ด๊ณ  ์–ด๋””์—์„œ ํ˜ธ์ถœํ•ด์•ผํ•˜๋Š”์ง€ ๋ชจ๋ฅด๊ฒ ์Šต๋‹ˆ๋‹ค. ์ด์— ๋Œ€ํ•ด ๋” ๋งŽ์ด ์•Œ๊ฒŒ๋˜์–ด ๊ธฐ์˜์ง€๋งŒ ๋ฌธ์„œํ™” ๋œ ์œ„์น˜๋ฅผ ์•Œ์•„์•ผํ•ฉ๋‹ˆ๋‹ค.

@christiaanwesterbeek https://material-ui.com/css-in-js/basics/#migration -for-material-ui-core-users๋ฅผ ์ฐธ์กฐํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

@oliviertassinari install() ๋ชจ๋“  ๊ตฌ์„ฑ ์š”์†Œ์˜ ํŒŒ์ผ์—์„œ ํ˜ธ์ถœ๋˜์–ด์•ผํ•˜๋Š” ๊ฒƒ ๊ฐ™ ์Šต๋‹ˆ๊นŒ? ๋” ๋ช…ํ™•ํ•œ ์„ค๋ช…์ด ํ•„์š”ํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

๋‚ด๊ฐ€ ํ‹€๋ ธ์„ ์ˆ˜๋„ ์žˆ๊ณ  ์„ค์น˜๊ฐ€ ์ถฉ๋Œ์„ ํ•ด๊ฒฐํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.
To switch from the default style implementation to this newest version, you need to execute the following code before importing any Material-UI's components:

import { install } from '@material-ui/styles';

install();

@oliviertassinari ์„ค์น˜ ๋ฐฉ๋ฒ• before importing any Material-UI's components ?
๊ฐ€์ ธ ์˜ค๊ธฐ๋Š” ํ•ญ์ƒ babel ๋ฐ tsc์— ์˜ํ•ด ์ •์ ์œผ๋กœ ์ฒ˜๋ฆฌ๋ฉ๋‹ˆ๋‹ค.

@zheeeng ES ๋ชจ๋“ˆ ๊ฐ€์ ธ ์˜ค๊ธฐ๋Š” ๋ชจ๋“ˆ์˜ ๋งจ ์œ„์— ์˜ฌ๋ ค์ง€๊ณ  ์ •์˜ ๋œ ์ˆœ์„œ๋Œ€๋กœ ๋™ ๊ธฐ์ ์œผ๋กœ ํ•ด๊ฒฐ๋ฉ๋‹ˆ๋‹ค. Material-UI ๋ฌธ์„œ์—์„œ ๋™์ผํ•œ ๋ฌธ์ œ์— ์ง๋ฉด ํ•ด ์žˆ์Šต๋‹ˆ๋‹ค. ํ•ด๊ฒฐ์ฑ…์€ ๋ชจ๋“  ๊ฒƒ์„ bootstrap.js ๋ชจ๋“ˆ์— ํŒจํ‚ค์ง•ํ•˜๊ณ  ๋จผ์ € ๊ฐ€์ ธ ์˜ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.
https://github.com/mui-org/material-ui/blob/cb30b43e9c6cd49f9b16536a125456f5ea3a85c5/docs/src/modules/components/bootstrap.js#L1 -L13
๋ฌธ์ œ๊ฐ€ ์ง€์†๋˜๋ฉด ๋‹ค๋ฅธ ๋ฌธ์ œ์— ๋Œ€ํ•œ ํ† ๋ก ์œผ๋กœ ์ด๋™ํ•˜์‹ญ์‹œ์˜ค.

@oliviertassinari ๊ฐ€์ ธ ์˜ค๊ธฐ ์ˆœ์„œ๋ฅผ ์˜ฎ๊ฒผ์Šต๋‹ˆ๋‹ค.

// entry index.js
import * as React from 'react'
import * as ReactDOM from 'react-dom'
import CssBaseline from '@material-ui/core/CssBaseline'
import { install } from '@material-ui/styles'

...์—

import * as React from 'react'
import * as ReactDOM from 'react-dom'
import { install } from '@material-ui/styles'
import CssBaseline from '@material-ui/core/CssBaseline'

์ฝ”๋“œ์—์„œ Cannot read property 'text' of undefined ์˜ค๋ฅ˜๋ฅผ๋ณด๊ณ ํ•ฉ๋‹ˆ๋‹ค. ํ…Œ๋งˆ ๊ฐœ์ฒด๋ฅผ ๊ฒ€์‚ฌํ•˜๋ฉด ๋น„์–ด ์žˆ์Šต๋‹ˆ๋‹ค.
๊ฐ€์ ธ ์˜ค๊ธฐ ์ˆœ์„œ๋ฅผ ๋‹ค์‹œ ์ „ํ™˜ํ•˜๋ฉด์ด ๋ถ€๋ถ„์ด ์ œ๋Œ€๋กœ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค.

const useStyles = makeStyles(
  (theme: Theme) => ({
    root: {
      flexShrink: 0,
      color: theme.palette.text.secondary,
    },
  }),
)

์ „์ฒด ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์„ <StylesProvider> ๋ž˜ํ•‘ ํ•  ๋•Œ๋„ ๋™์ผํ•œ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

ํ—‰

์ฝ”๋“œ์—์„œ Cannot read property 'text' of undefined ์˜ค๋ฅ˜๋ฅผ๋ณด๊ณ ํ•ฉ๋‹ˆ๋‹ค. ํ…Œ๋งˆ ๊ฐœ์ฒด๋ฅผ ๊ฒ€์‚ฌํ•˜๋ฉด ๋น„์–ด ์žˆ์Šต๋‹ˆ๋‹ค.

๋‚˜๋Š” ๊ฐ™์€ ๋ฌธ์ œ๊ฐ€ ์žˆ์—ˆ๋‹ค. "@ material-ui / core"๋ฅผ 3.6.0์œผ๋กœ ์—…๊ทธ๋ ˆ์ด๋“œํ•˜๊ฑฐ๋‚˜ @ material-ui / styles๋ฅผ 3.0.0-alpha.1๋กœ ์—…๊ทธ๋ ˆ์ด๋“œํ•˜์—ฌ ์ˆ˜์ •๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๋‚˜๋Š” ์žŠ์—ˆ๋‹ค. ๋‘˜ ๋‹ค ๋” ์ž˜ํ•˜์‹ญ์‹œ์˜ค.

๊ทธ๋Ÿฌ๋‚˜ makeStyles์— ์ „๋‹ฌ ๋œ ํ•จ์ˆ˜๊ฐ€๋ฐ›์„ ์ •ํ™•ํ•œ ํ…Œ๋งˆ๋Š” createMuiTheme๋กœ ๋งŒ๋“  ํ…Œ๋งˆ๊ฐ€ ์•„๋‹™๋‹ˆ๋‹ค. ๋Œ€์‹  ๊ธฐ๋ณธ ํ…Œ๋งˆ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ฒฐ๊ตญ ๋‚ด๊ฐ€ํ•˜๊ฒŒ ๋œ ๊ฒƒ์€ ์ „๋‹ฌ ๋  ์–ด๋–ค ์ฃผ์ œ์— ์˜์กดํ•˜์ง€ ์•Š๋Š” ๊ฒƒ์ด ์—ˆ์Šต๋‹ˆ๋‹ค. ๋Œ€์‹  ์Šคํƒ€์ผ์— ํ•„์š”ํ•œ ๋ชจ๋“  ํŒŒ์ผ์—์„œ ํ…Œ๋งˆ๋ฅผ ๊ฐ€์ ธ ์™”์Šต๋‹ˆ๋‹ค.

@christiaanwesterbeek @material-ui/[email protected] ๋ฐ @material-ui/styles/.0.0-alpha.2 ์„ (๋ฅผ) ์„ค์น˜ํ–ˆ์ง€๋งŒ ์—ฌ์ „ํžˆ์ด ๋ฌธ์ œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

์ด๊ฒƒ์€ ๋‹น๋ฉดํ•œ์ด ๋ฌธ์ œ (8223)์™€ ๊ด€๋ จ์ด์—†๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์–ด์จŒ๋“  ์—ฌ๊ธฐ์— ๊ฐ„๋‹ค. ํ…Œ๋งˆ๋ฅผ ๊ฐ€์ ธ์˜ค๊ณ  makeStyles ์— ์ „๋‹ฌํ•˜๋Š” ํ•จ์ˆ˜์— ์ „๋‹ฌ๋˜๋Š” ๊ฒƒ์— ์˜์กดํ•˜์ง€ ๋งˆ์‹ญ์‹œ์˜ค. ๊ทธ๋ฆฌ๊ณ  ๋‹น์‹ ์€ ๋๋‚ฌ์Šต๋‹ˆ๋‹ค.

๋ˆ„๊ตฐ๊ฐ€ v3.7.0 (https://github.com/mui-org/material-ui/releases/tag/v3.7.0)์—์„œ ์„ค์น˜ ๋‹จ๊ณ„๊ฐ€ ์—ฌ์ „ํžˆ ํ•„์š”ํ•œ์ง€ ์—ฌ๋ถ€๋ฅผ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

@christiaanwesterbeek ์˜ˆ, ํ•„์ˆ˜์ž…๋‹ˆ๋‹ค. Material-UI v4์—์„œ ์„ค์น˜ ๋‹จ๊ณ„๋ฅผ ์ œ๊ฑฐํ•ฉ๋‹ˆ๋‹ค.

@oliviertassinari ์•ˆ๋…•ํ•˜์„ธ์š”, ์ตœ์‹  v3.9.0์—์„œ์ด ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•˜๊ณ  @ material-ui / styles๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. withStyles ์—์„œ core withStyles ์„ (๋ฅผ) ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๋‘ ๊ฐ€์ง€ ์งˆ๋ฌธ์ด ์žˆ์Šต๋‹ˆ๋‹ค. .

  1. ์ง€๊ธˆ mui / styes๋กœ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ํ•˜๊ฑฐ๋‚˜ v4 ๋ฆด๋ฆฌ์Šค๋ฅผ ๊ธฐ๋‹ค๋ ค์•ผํ•ฉ๋‹ˆ๋‹ค. (๋Œ€๊ทœ๋ชจ ์•ฑ)
  2. ์ด ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์„ ์‚ฌ์šฉํ•˜์—ฌ https://github.com/mui-org/material-ui/issues/8223#issuecomment -331081785์ด ๋ฌธ์ œ๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š” ์ ์ ˆํ•œ ๋ฐฉ๋ฒ•์ž…๋‹ˆ๊นŒ? ๋งˆ์นจ๋‚ด ๋นŒ๋“œ์—์„œ ์ž˜ ์ž‘๋™ํ•˜์ง€๋งŒ ์ฒ˜์Œ์— ์™œ ๋ฐœ์ƒํ•˜๋Š”์ง€ ์ดํ•ดํ•˜์ง€ ๋ชปํ•˜๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

๊ฐ์‚ฌ

์ตœ์‹  v3.9.0์—์„œ์ด ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

@ w3nda ์ด๊ฒƒ์€ ๋„ˆ๋ฌด ์ผ๋ฐ˜์ ์ž…๋‹ˆ๋‹ค.์ด ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•˜๋Š” ์ด์œ ๋Š” ๋ฐฑ๋งŒ ๊ฐ€์ง€์ž…๋‹ˆ๋‹ค.

์ง€๊ธˆ mui / styes๋กœ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ํ•˜๊ฑฐ๋‚˜ v4 ๋ฆด๋ฆฌ์Šค๋ฅผ ๊ธฐ๋‹ค๋ ค์•ผํ•ฉ๋‹ˆ๋‹ค. (๋Œ€๊ทœ๋ชจ ์•ฑ)

ํด๋ž˜์Šค ์ด๋ฆ„ ํ•ด์‹ฑ ๋…ผ๋ฆฌ๋ฅผ ๋˜๋Œ๋ฆด ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์„œ๋ฒ„์˜ ์„ฑ๋Šฅ์€ ํฌ๊ฒŒ ํ–ฅ์ƒ๋˜์ง€๋งŒ ํด๋ผ์ด์–ธํŠธ์—๋Š” ์ƒ๋‹นํ•œ ๋น„์šฉ์ด ๋“ญ๋‹ˆ๋‹ค. ๋Œ€์‹  ํ™œ์„ฑํ™” ํ•  ํ”Œ๋ž˜๊ทธ๋ฅผ ์ œ๊ณต ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ ์•„๋‹ˆ, ์ตœ์„ ์˜ ์„ ํƒ์€ ํ•ต์‹ฌ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ์ด ํŽ˜์ด์ง€ https://material-ui.com/guides/server-rendering/#troubleshooting ์„ ์‚ฌ์šฉํ•ด ๋ณด์…จ์Šต๋‹ˆ๊นŒ?

@oliviertassinari ๋น ๋ฅธ ์‘๋‹ต์— ๊ฐ์‚ฌ๋“œ๋ฆฝ๋‹ˆ๋‹ค. ๋ฌธ์ œ๋ฅผ ๋””๋ฒ„๊น…ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ๋ชจ๋ฅด๊ฒ ์Šต๋‹ˆ๋‹ค. ์–ธ๊ธ‰ ํ•œ ๋งํฌ๋Š” ์ •์  ์‚ฌ์ดํŠธ ์—ญํ• ์„ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ €์™€ ๊ด€๋ จ์ด ์—†์Šต๋‹ˆ๋‹ค ..
๋‚ด๊ฐ€ ์–ธ๊ธ‰ ํ•œ ์˜๊ฒฌ์ด ๋„์›€์ด ๋˜์—ˆ์Šต๋‹ˆ๊นŒ? ์ œ ๊ฒฝ์šฐ์—์ด ๋ฌธ์ œ์˜ ์›์ธ์„ ์•Œ๋ ค ์ฃผ์–ด์•ผํ•˜์ง€ ์•Š์Šต๋‹ˆ๊นŒ?

@ w3nda ์ •์  ์›น ์‚ฌ์ดํŠธ์—๋„ ๋™์ผํ•œ ๋ฌธ์ œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. HTML์„ ์ƒ์„ฑํ•ด์•ผํ•˜๋ฏ€๋กœ ์„œ๋ฒ„ ์ธก ๋ Œ๋”๋ง API๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ์ธ๋ฑ์Šค ์นด์šดํ„ฐ๊ฐ€ ๋‘ ํŽ˜์ด์ง€ ์‚ฌ์ด์—์„œ ๋ˆ„์ถœ๋˜๋ฉด ํด๋ž˜์Šค ์ด๋ฆ„์ด ์˜ฌ๋ฐ”๋ฅด์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๊ธ€์Ž„, ๋‚˜๋Š” ๋Š๋ฆฐ ํด๋ž˜์Šค ์ด๋ฆ„ ์ƒ์„ฑ๊ธฐ๊ฐ€ ๊ทธ๋Ÿฌํ•œ ๋ฌธ์ œ๋ฅผ ๋””๋ฒ„๊น…ํ•˜๋Š” ๊ฒƒ (๋ฐ ๋นˆ๋„)์— ๋น„ํ•ด ์ข‹์€ ์ ˆ์ถฉ์•ˆ์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ, @material-ui/styles ์—…๊ทธ๋ ˆ์ด๋“œ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ฐ„๋‹จํ•œ ํƒˆ์ถœ๊ตฌ์ž…๋‹ˆ๋‹ค.

๋‚˜๋Š” ๋ฐฉ๊ธˆ ๋น„์Šทํ•œ ๋ฌธ์ œ๊ฐ€ ์žˆ์—ˆ๊ณ  ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์ค‘ ํ•˜๋‚˜์— ์žˆ๋˜ ์˜ค๋ž˜๋œ material-ui ๊ฐ€์ ธ ์˜ค๊ธฐ์˜€์Šต๋‹ˆ๋‹ค. ๊ฐœ๋ฐœ ๋ชจ๋“œ์—์„œ๋Š” ์ž˜ ์ž‘๋™ํ–ˆ์ง€๋งŒ ํ”„๋กœ๋•์…˜์—์„œ๋Š” ์†์ƒ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๋‚˜๋Š” ์ด๊ฒƒ์ด ์ „์— ์ž‘๋™ํ–ˆ๋‹ค๊ณ  ํ™•์‹ ํ•ฉ๋‹ˆ๋‹ค.์ด ๊ฒฝ์šฐ ๊ฒฝ๊ณ ๊ฐ€ ๋ฐœํ–‰ ๋  ์ˆ˜ ์žˆ๋Š”์ง€๋Š” ํ™•์‹คํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
ํ”„๋กœ์ ํŠธ๊ฐ„์— ์ผ์น˜ํ•˜๋„๋ก ๋ฒ„์ „์„ ์—…๋ฐ์ดํŠธํ–ˆ๊ณ  ๋ชจ๋“  ๊ฒƒ์ด ๋‹ค์‹œ ์ž‘๋™ํ–ˆ์Šต๋‹ˆ๋‹ค.

์•ˆ๋…•ํ•˜์„ธ์š”, ์ €๋Š” ์ œ ์‚ฌ์ดํŠธ์˜ ๋‹จ์ผ ์ž…๋ ฅ, ๋ฒ„ํŠผ ๋ฐ ์–‘์‹์—๋งŒ ์ž๋ฃŒ๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์œผ๋ฉฐ์ด ๋Œ“๊ธ€ ๋‹ค์Œ์— <JssProvider /> ๋ฅผ ์‚ฌ์šฉํ•ด์•ผํ–ˆ์Šต๋‹ˆ๋‹ค. https://github.com/mui-org/material-ui/issues / 8223 # issuecomment -331412432

์ด jss ๊ณต๊ธ‰์ž๊ฐ€ ํ•„์š”ํ•˜๋‹ค๋Š” ๊ฒƒ์€ ์„ฑ๊ฐ€์‹  ์ผ์ž…๋‹ˆ๋‹ค. ์ตœ์ข… ๋นŒ๋“œ ํฌ๊ธฐ๋ฅผ ๋Š˜๋ฆฌ์ง€ ์•Š๋„๋ก ํ•  ์ˆ˜์žˆ๋Š” ๋˜ ๋‹ค๋ฅธ ์ˆ˜์ • ์‚ฌํ•ญ์ด ์žˆ์Šต๋‹ˆ๊นŒ?

@kopax JssProvider ๋ฅผ) ๋ฌด์—‡์— ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๊นŒ?

์•ˆ๋…•ํ•˜์„ธ์š” @oliviertassinari , production ๋‹ค๋ฅธ ๊ฒฝ๋กœ๋ฅผ ๋ฐฉ๋ฌธํ•˜๊ธฐ ์ „์— (react-router๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค) :

image

๊ฒฝ๋กœ ๋ฐฉ๋ฌธ ํ›„ production ๋˜๋Š” development

image

์—ฌ๊ธฐ์„œ ๋น„์Šทํ•œ ์ผ์ด ์–‘์‹ (์ด์ƒํ•œ ์ƒ์ž ๊ทธ๋ฆผ์ž)์—์„œ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. ํ”„๋กœ๋•์…˜์—์„œ๋งŒ ๋ฐœ์ƒํ•˜๋Š” ์ ์ ˆํ•œ CSS๋ฅผ ๊ฐ–๊ธฐ ์œ„ํ•ด ๋‹ค๋ฅธ ํŽ˜์ด์ง€๋ฅผ ๋ฐฉ๋ฌธํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค.

image

JssProvider ์ถ”๊ฐ€ํ•˜๋ฉด ๋‘ ๋ฌธ์ œ๊ฐ€ ๋ชจ๋‘ ํ•ด๊ฒฐ๋ฉ๋‹ˆ๋‹ค. (๊ณ ์ • : ์šฐ๋ฆฌ๊ฐ€ ๊ฐ™์€ CSS๋ฅผ ๊ฐ€์ง€๊ณ  production ์— ๋น„ํ•ด development )

๋‚˜๋Š” ๋ชจ๋ฅธ๋‹ค. ์ œ๊ณต๋œ ์ •๋ณด๋กœ ๋„์™€ ๋“œ๋ฆด ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

๋ชจ๋“  ๊ฒƒ๋„ ๋ง๊ฐ€์กŒ์Šต๋‹ˆ๋‹ค. ํ”„๋กœ๋•์…˜์—์„œ ์ž˜๋ชป๋œ ์ฃผ๋ฌธ jssXX ํด๋ž˜์Šค๋ฅผ ๋ฐœ๊ฒฌํ•˜๊ณ  ๊ฒฐ๊ณผ์ ์œผ๋กœ ์ž˜๋ชป๋œ ์Šคํƒ€์ผ์ด ์ง€์ •๋ฉ๋‹ˆ๋‹ค. ํŽ˜์ด์ง€๋ฅผ ์ƒˆ๋กœ ๊ณ ์นœ ํ›„์— ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

์•„์ง ์ด์œ ๋ฅผ ์ฐพ์„ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

@oliviertassinari ์•„๋งˆ๋„ ์šฐ๋ฆฌ๊ฐ€ ์‚ฌ์šฉํ•˜๊ณ ์žˆ๋Š” [email protected]์—์„œ ์‚ฌ์šฉํ•˜๋Š” ๋ฒ„์ „ ๋ฒˆํ˜ธ๋Š” ๋ฌด์Šจ ์ผ์ด ์ผ์–ด๋‚˜๊ณ  ์žˆ๋Š”์ง€ ์•Œ๋ ค์ฃผ๋Š” ๋ฐ ๋„์›€์ด ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

        "@material-ui/core": "^1.4.0",
        "@material-ui/icons": "^1.0.0",
        "material-ui-chip-input": "1.0.0-beta.6 - 1.0.0-beta.8",

Material-UI๊ฐ€ ํ•œ ๋ฒˆ๋งŒ ๋ฒˆ๋“ค๋กœ ์ œ๊ณต๋˜๋„๋ก ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ? ๋‘ ๊ฐ€์ง€ ๋ฒ„์ „์„ ๋™์‹œ์— ์‚ฌ์šฉํ•˜๋ฉด ๋™์ผํ•œ ๋ฒ„๊ทธ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ž˜. ์žˆ์„ ์ˆ˜์žˆ๋‹ค. ๋ฒ„์ „ ~ 1.5๋ฅผ ๊ถŒ์žฅํ•˜๋Š” react-admin ์„ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

JssProvider ๋ฅผ ์ถ”๊ฐ€ํ•˜์—ฌ ํ”„๋กœ๋•์…˜ ๋ฒ„๊ทธ๋ฅผ ํ•ด๊ฒฐํ–ˆ์Šต๋‹ˆ๋‹ค. ์ด์ œ ํŽ˜์ด์ง€๋ฅผ ์ •์ƒ์ ์œผ๋กœ ์ƒˆ๋กœ ๊ณ ์น  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

import React from "react";
import { Admin, Resource } from "react-admin";
import JssProvider from "react-jss/lib/JssProvider";

const App = () => (
  <JssProvider>
    <Admin dataProvider={dataProvider}>
      <Resource name="trip" list={RequestsList} className="resourceItem" />
    </Admin>
  </JssProvider>
);

export default App;

@andrewkslv ์ด๊ฒƒ์ด ๋ฐ”๋กœ ์šฐ๋ฆฌ๊ฐ€ ํ”ผํ•˜๋ ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. @ material-ui์˜ Input ๋ฐ Button ๊ตฌ์„ฑ ์š”์†Œ ๋งŒ ์‚ฌ์šฉํ•˜๋ฏ€๋กœ JssProvider ์—†์ด ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค. , ๋Œ€์‹  ๋‚˜๋จธ์ง€ UI ๋ฅผ react-admin์— ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์„ ์„ ํ˜ธํ•ฉ๋‹ˆ๋‹ค.

@oliviertassinari ๋ฐฉ๊ธˆ ํ™•์ธํ–ˆ๊ณ  ๋ช‡ ๊ฐ€์ง€ ์ข…์†์„ฑ ๋ฌธ์ œ๊ฐ€์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. ์ˆ˜์ • ํ–ˆ์ง€๋งŒ ์—ฌ์ „ํžˆ ๋‹ค์Œ npm ls @material-ui/core ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

โ”œโ”€โ”ฌ @bootstrap-styled/[email protected]
โ”‚ โ””โ”€โ”€ @material-ui/[email protected] 
โ”œโ”€โ”€ @material-ui/[email protected] 
โ””โ”€โ”ฌ [email protected]
  โ””โ”€โ”€ @material-ui/[email protected] 

์ˆ˜ํ–‰ ํ›„ :

rm -rf node_modules/@bootstrap-styled/ra-ui/node_modules/@material-ui/
rm -rf node_modules/ra-ui-materialui/node_modules/@material-ui/
npm ls @material-ui/core
โ”œโ”€โ”ฌ @bootstrap-styled/[email protected]
โ”‚ โ””โ”€โ”€ UNMET DEPENDENCY @material-ui/[email protected] 
โ”œโ”€โ”€ @material-ui/[email protected] 
โ””โ”€โ”ฌ [email protected]
  โ””โ”€โ”€ UNMET DEPENDENCY @material-ui/[email protected] 

์ด์ œ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค (ํ”„๋กœ๋•์…˜์—์„œ CSS ๋ฌธ์ œ ์—†์Œ). ์ด๊ฑด ๋‚ด๊ฐ€ ์›ํ•˜๋Š” ๊ฒŒ ์•„๋‹Œ ๊ฒƒ ๊ฐ™์•„ ...

๊ด€๋ จ ํ”„๋กœ์ ํŠธ @ material-ui ์ข…์†์„ฑ :

๋ฌด์—‡์„ํ•ด์•ผํ• ์ง€ ์•„์‹ญ๋‹ˆ๊นŒ?

@kopax ๋””๋ฒ„๊น… ํ•  ์ˆ˜์žˆ๋Š” ๊ฒƒ์ด ์—†์œผ๋ฉด ๋งํ•˜๊ธฐ๊ฐ€ ์–ด๋ ต์Šต๋‹ˆ๋‹ค. ์ง€๊ธˆ ์ž‘๋™ํ•œ๋‹ค๋Š” ์†Œ์‹์„ ๋“ฃ๊ณ  ๊ธฐ์ฉ๋‹ˆ๋‹ค.

Material-UI์—์„œ ์Šคํƒ€์ผ ๊ตฌ์„ฑ ์š”์†Œ๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์Œ์„ ํ™•์ธํ–ˆ์Šต๋‹ˆ๋‹ค. ์‹œ๊ฐ„์ด ์žˆ๋‹ค๋ฉด Gitter์˜ ํ†ตํ•ฉ์— ๋Œ€ํ•ด ์ด์•ผ๊ธฐํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค.

์ž‘์—… ์†”๋ฃจ์…˜์€ ์ž์—ฐ์Šค๋Ÿฝ์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ฆ‰, npm์œผ๋กœ ์‹คํ–‰ํ•  ์ˆ˜์—†๋Š” ์ž‘์—…์ด ํฌํ•จ๋ฉ๋‹ˆ๋‹ค. ๋‚˜๋Š” ๊ทธ๊ฒƒ์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š์„ ๊ฒƒ์ด๋‹ค. ๋‚˜๋Š” ์ด๊ฒƒ์„ ํžŒํŠธ๋กœ ์ฃผ์—ˆ๋‹ค.

์šฐ๋ฆฌ๋Š” ์›”์š”์ผ์— ๊ธฐํšŒ๋ฅผ ๊ฐ€์งˆ ๊ฒƒ์ด๊ณ , ๋‚˜๋Š” mui gitter ์ฑ„๋„์— ์ฐธ์—ฌํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์•ˆ๋…•ํ•˜์„ธ์š” @kopax , ํ•ด๊ฒฐ์ฑ…์„ ์ฐพ์•˜์Šต๋‹ˆ๊นŒ?

์•„๋‹ˆ, ์•„์ง. ๊ณต๊ธ‰์ž ์—†์ด๋Š” ์•„๋‹™๋‹ˆ๋‹ค. @oliviertassinari ๋‚˜๋Š” ๊ธฐ์šด์—์žˆ๋‹ค.

@andrewkslv ๊ท€ํ•˜์˜ ์†”๋ฃจ์…˜์ด ์ •๋ง ์ €์—๊ฒŒ react-admin ๋ฐ AWS Amplify๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๋ฐ˜์‘ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ S3 ๋ฒ„ํ‚ท์— ๋ฐฐํฌ ํ•  ๋•Œ๋งˆ๋‹ค ์Šคํƒ€์ผ์ด ๋ชจ๋‘ ๊นจ์กŒ๊ณ  ์†”๋ฃจ์…˜์ด ์ €๋ฅผ ์ •๋ง๋กœ ๊ตฌํ–ˆ์Šต๋‹ˆ๋‹ค.

์—ฌ๊ธฐ์—๋„ ๊ฐ™์€ ๋ฌธ์ œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. JssProvider๋ฅผ ์ถ”๊ฐ€ํ•˜๋Š” ๊ฒƒ์ด ๋„์›€์ด๋˜๋Š” ์ด์œ ๋Š” ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?

์ค‘๋ณต ๋œ ์Šคํƒ€์ผ ์ธ์Šคํ„ด์Šค๊ฐ€ ์‚ฌ์šฉ๋  ๋•Œ ๊ฒฝ๊ณ ํ•˜๊ธฐ ์œ„ํ•ด v4์— ๊ฒฝ๊ณ ๋ฅผ ์ถ”๊ฐ€ํ–ˆ์Šต๋‹ˆ๋‹ค : # 15422.

๋ชจ๋ฅด๊ฒ ์–ด์š”. ๋‚˜๋Š” react-admin ์—์„œ ์ƒˆ๋กœ์šด ๋ฒ„์ „์˜ ๋จธํ‹ฐ๋ฆฌ์–ผ UI๋ฅผ ํ”„๋ ˆ์ž„ ์›Œํฌ์— ๊ตฌํ˜„ํ•  ๋•Œ์ด ๋ฌธ์ œ๋ฅผ ์ œ๊ธฐํ–ˆ์ง€๋งŒ ๋ฌด์‹œ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

https://github.com/marmelab/react-admin/pull/3102#issuecomment -484228320

ํ”„๋กœ๋•์…˜ ๋นŒ๋“œ ํด๋ž˜์Šค ์ด๋ฆ„ ์ถฉ๋Œ # 8223์— ๋Œ€ํ•œ ํ•ด๊ฒฐ์ฑ…์€ ์–ด๋””์—์„œ ์ฐพ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

๊ฐ์‚ฌ,

@oliviertassinari ๋‚ด๊ฐ€ ๋ชจ๋“  ์ง€์นจ์„ ๋”ฐ๋ž์Œ์—๋„ ๋ถˆ๊ตฌํ•˜๊ณ ์ด ๋ฌธ์ œ์— ๋‹ค์‹œ ์ง๋ฉดํ–ˆ์Šต๋‹ˆ๋‹ค. ๋‹ค๋ฅธ ์‚ฌ๋žŒ๋“ค์„ ์œ„ํ•ด ์ผํ•˜๊ณ  ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๋‚˜๋Š” ๊ธฐ๋ณธ์ ์ธ ๊ฒƒ์„ ๋†“์น˜๊ณ ์žˆ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

https://stackoverflow.com/questions/58938080/jssprovider-not-generating-class-prefix-with-classnameprefix

๋‹ค์Œ ๋ฒ„์ „์˜ ํŒจํ‚ค์ง€๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

"@ material-ui / core": "^ 4.6.1",
"@ material-ui / icons": "^ 4.5.1",
"๋ฐ˜์‘": "^ 16.12.0",
"react-dom": "^ 16.12.0",
"react-jss": "^ 10.0.0",
"๋ฐ˜์‘ ์Šคํฌ๋ฆฝํŠธ": "3.2.0"

์—…๋ฐ์ดํŠธ : ๋ฌธ์ œ๊ฐ€ ํ•ด๊ฒฐ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๋ฌธ์„œํ™”๋ฅผ ์ฒ ์ €ํžˆํ•˜์ง€ ๋ชปํ•ด ์ฃ„์†กํ•ฉ๋‹ˆ๋‹ค. ๋ฌธ์„œ์˜์ด ๋ถ€๋ถ„์ด ๋‚ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ–ˆ์Šต๋‹ˆ๋‹ค.

https://material-ui.com/styles/api/#creategenerateclassname -options-class-name-generator

๊ทธ๋Ÿฌ๋‚˜ ์–ด๋–ป๊ฒŒ ๋“  ๋‹ค๋ฅธ ๋ชจ๋“  ์‚ฌ๋žŒ๋“ค์„ ์œ„ํ•ด ์ž‘๋™ํ•˜๊ณ  ์žˆ๋˜ JSSProvider ์†”๋ฃจ์…˜์ด ์ €์—๊ฒŒ๋Š” ์ž‘๋™ํ•˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค. ์–ด์จŒ๋“  ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค :)

@KannugoPrithvi ๊ฐ์‚ฌ https://material-ui.com/styles/api/#creategenerateclassname -options-class-name-generator

์ด ํŽ˜์ด์ง€๊ฐ€ ๋„์›€์ด ๋˜์—ˆ๋‚˜์š”?
0 / 5 - 0 ๋“ฑ๊ธ‰