#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'))
| κΈ°μ | λ²μ |
|----------------|---------|
| λ¨Έν°λ¦¬μΌ UI | 1.0.0-λ² ν.22 |
| λ°μ | 16.0.0 |
| λΈλΌμ°μ | Chrome λ²μ 62.0.3202.94(곡μ λΉλ)(64λΉνΈ) |
@tdkn jss-extend νλ¬κ·ΈμΈμ λ‘λνκ³ μμ΅λκΉ? https://github.com/cssinjs/react-jss#custom -setup
@mbrooks
κ°μ¬ν©λλ€π
μλμ κ°μ΄ μμ νμ΅λλ€.
κ·Έλ¬λ μ΄κ²μ μμΈν λ¬Έμνλμ΄ μμ΅λκΉ? :μ€λ§ν:
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'))
κ·Έλ¬λ jss-extendλ jss-preset-defaultμ μΌλΆκ° μλλλ€.
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 λμΌ: muiκ° jss-preset-default
λ₯Ό μ¬μ©νκ³ μλ€κ³ νμ νμ§λ§ μ°μ°ν λ°κ²¬νμ΅λλ€.
compose
λλ extend
λ₯Ό μ¬μ©νλ €κ³ νμ΅λλ€.
@olegberman μ΄ 2kbμ κ²½μ° gzipμΌλ‘ μμΆλ κ²½μ° μ΄ μ κ±°κ° κ°μΉκ° μμμ΅λκΉ? π€
@oliviertassinari κ° λμ€μ λ§νμ΅λλ€.
μ΄ λ³κ²½ μ¬νμ λ°μνλλ‘ μ€λͺ μλ₯Ό μ λ°μ΄νΈνμ΅λλ€.
νμ₯ νλ¬κ·ΈμΈμ μ¬μ©νλ €κ³ μλνλ©΄μ λμΌν λ¬Έμ κ° λ°μνμ΅λλ€.
λλ μ΄κ²μ λ°λ₯΄λ €κ³ λ
Έλ ₯νλ€ : https://material-ui-next.com/guides/right-to-left/#3 -jss-rtl
νμ§λ§ μλ² μΈ‘ λ λλ§μ μ¬μ©νκ³ μμΌλ©° μλνκ² λ§λ€ μ μμμ΅λλ€.
μΆμ : μ΄ νλ¬κ·ΈμΈμ 2kbμ©μΌλ‘ μ κ±°νλ κ²μ΄ κ°μΉκ° μλμ§ νμ€νμ§ μμ΅λλ€. λͺ¨λκ° μ¬μ©ν΄μΌ νλ μ λ§ λ©μ§ κΈ°λ₯μ΄κΈ° λλ¬Έμ λλ€ π
λ λ²μ§Έλ‘, νμ₯ λ° μμ±μ JSSμ IMHO νμ λꡬμ΄λ©° 2kbμ κ°μΉκ° μμ΅λλ€.
λ λλ§ λ°νμ μ€λ²ν€λλ₯Ό μ λνν΄μΌ ν©λλ€. λ²λ€ ν¬κΈ°μ κ΄ν κ²λ§μ΄ μλλλ€.
muiμ κ²½μ° μ¬μ ν μ ν μ¬νμ΄λ―λ‘ μ€λ²ν€λκ° μ¦κ°νλ κ²μΌλ‘ νμΈλλ©΄ className λΌμ΄λΈλ¬λ¦¬ λ° μ€νλ λ μ°μ°μλ₯Ό κ³μ μ¬μ©ν μ μμ§λ§ ν° μ°¨μ΄λ μμ κ²μ΄λΌκ³ μκ°ν©λλ€.
λ¬Έμμ λ°λΌ jss-rtl νλ¬κ·ΈμΈμ νμ±νν΄μΌ νλ μ νν λ°©μμΌλ‘ jss-extend νλ¬κ·ΈμΈμ νμ±ννλ €κ³ νμ΅λλ€. λμΌν μ½λμ΄μ§λ§ jss-extendμ λν λͺ¨λ νλ¬κ·ΈμΈ κ΄λ ¨ νΈμΆμ κ΅μ²΄νμ΅λλ€. κ·Έλ¬λ μ±κ³΅νμ§ λͺ»νμ΅λλ€. νμ₯ν΄μΌ νλ κ·μΉμ μ€μ λ‘ μν₯μ λ°μ§ μμ΅λλ€. λκ΅°κ°κ° κ²°κ΅ κ·Έκ²μ λ§λ€ μ μμμ΅λκΉ?
μ μ₯, μ§λ λ λ°μ material-uiμμ jss-extendλ₯Ό μ¬μ©νλ λ°©λ²μ λν΄ μΌμ΅λλ€. μ΄ μμ λ μ΄λκ°μ μμ΅λλ€:
cssLabel: {
"&$cssFocused": {
color: grey[500]
}
},
cssFocused: {
backgroundColor: blue[500]
},
μ¬κΈ°μ "&$cssFocused
λ extend: cssFocusedμ κ°μ κ²μ
λλ€. νμ§λ§ κ·Έλ μ§ μμ΅λλ€. κ·Έλμ κ·Έκ²μ νλ λ°©λ²?
@nsaubi μ€μ²© κΈ°λ₯μ λν΄ μ΄μΌκΈ°νκ³ μμΌλ©° &λ sassμμμ κ°μ΄ ν¬ν¨νλ κ·μΉ μ νκΈ°λ‘ λ체λ©λλ€.
jss-extend/composeκ° λ―Έλμ νμ€μ΄ λ κ²μΈμ§μ λν μ λ³΄κ° μμ΅λκΉ?
jss μ½λλ₯Ό λ κΉλνκ² λ³΄μ΄κ² νλ λ° λμμ΄ λλ―λ‘ νμ₯μ΄ λ€μ λ§λ€μ΄μ§κΈ°λ₯Ό λ°λλλ€.
++ (1 )
2kbλ λ³λ‘ μ€μνμ§ μμ΅λλ€. μμΌλ‘ 'νμ₯νκ³ μμ±'μΌλ‘ μ’μ μ½λ© ν¨ν΄μ ꡬμΆνλ κ²μ΄ λ μ€μνλ€κ³ μκ°ν©λλ€.
@oliviertassinari λ€μ μΆκ°νκ³ μ€μ λ‘ μ 체 μ§μμ μΆκ°νκΈ° μν΄ νκ°ν΄ μ£Όμκ² μ΅λκΉ?
@gitsupersmecher JssProvider
κ΅¬μ± μμλ₯Ό μ¬μ©νμ¬ JSSμ νλ¬κ·ΈμΈμ μΆκ°νμ¬ "νμ₯ λ° μμ±"μ λν μμ ν μ§μμ μ΄λ―Έ κ°μ§ μ μμ΅λλ€. λλΆλΆμ μ¬λλ€μ μμ΄ μ§λΌ μ μμ΅λλ€. +2kb λ²λ€ μ¦κ°λ λ¬Έμ μ ν μΈ‘λ©΄μ΄κ³ λ°νμ λΉμ©μ λ€λ₯Έ μΈ‘λ©΄μ
λλ€.
λ°νμ λΉμ©μ 2μ κ²½μ° κ±°μ λμ λμ§ μλλ€κ³ μκ°ν©λλ€. λν λͺ kbλ₯Ό μΆκ°ν κ°μΉκ° μλ€κ³ μκ°ν©λλ€. μ°λ¦¬λ μ€νμΌ μ§μ μ κ³΅κ° APIμ μΌλΆλ‘ λ§λ€μκ³ λ§€μ° μΈκΈ° μλ μμ μ΄κΈ° λλ¬Έμ λλ€.
κ·Έλ¬λ νμ₯ λμ μ λλΆλΆμ κ²½μ°λ₯Ό λ€λ£¨λ μ€νλ λ μ°μ°μλ₯Ό μ¬μ©ν μ μμΌλ©° ꡬμ±μ classNameμ μ°κ²°νμ¬ κ΅¬μ± μμ λ΄λΆμμ μνν μ μμ΅λλ€.
:+1: κ·Έ λ κ°λ₯Ό λ€μ μΆκ°ν λ(νμ₯ λ° μμ±). κ·Έλ€μ λ¨μ§ 2KB IMOμ λν΄ νμ€ν κ°μΉκ° μμ΅λλ€.
λ λ€λ₯Έ μ΅μ μ λ΄λΆ jss μΈμ€ν΄μ€λ₯Ό μ€μ λ‘ μ¨κΈ°κ³ μ€νμΌ μ§μ μ μν΄ μ체 jss μ€μ μ μ¬μ©νλ λ°©λ²μ λ§€μ° λͺ ννκ² λ§λλ κ²μ λλ€.
μλ νμΈμ, μ±κ³΅νμ§ μκ³ (jss-rtl νλ¬κ·ΈμΈ μμ μ¬μ©) nextjs νλ‘μ νΈμ jss-extendλ₯Ό μΆκ°νλ €κ³ ν©λλ€. λκ΅°κ°κ° κ·Έκ²μ μλνκ² ν μ μμ΅λκΉ?
^^ μ΄κ²λ μκ³ μΆμ΅λλ€
μ¬κΈ°μ λ΄κ°νλ μΌμ κ²μν©λλ€. nextjs μμ μμ μ΄λ―Έ μ¬μ©λμκΈ° λλ¬Έμ generateClassNameμ ꡬννλ λ°©λ²μ λͺ¨λ₯΄κ² μ΅λλ€.
μ΄ μλ₯Ό κΈ°λ³ΈμΌλ‘ μ¬μ©:
https://github.com/mui-org/material-ui/tree/master/examples/nextjs
λ¨Όμ jss-extendλ₯Ό μ€μΉνμμμ€.
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 μΈμ€ν΄μ€λ₯Ό μ¬μ©ν μ μμ΅λλ€. "react-jss"μμ {jss}λ₯Ό κ°μ Έμ€κ±°λ http://cssinjs.org/jss-preset-default?v μμ κΈ°λ³Έ μ¬μ μ€μ μ κ°μ Έμ¬ μ μμ΅λλ€.
μ΄ λ¬Έμ μ λΆλͺνμμμ€. λν κΈ°λ³Έμ μΌλ‘ μ μ리μ μμ΄μΌ νλ€κ³ μκ°ν©λλ€.
@oliviertassinari μ μΆλ‘ μ΄ μΆ©λΆν κ°λ ₯νμ§ μμ κ°λ₯μ±μ΄ μλ€λ κ²μ κΈ°λ°μΌλ‘ κΈ°λ³Έμ μΌλ‘ λ°°μΉλμ΄μΌ νλ€κ³ μ£Όμ₯ν©λλ€. λΆλΆμ μΌλ‘λ νμ₯/ꡬμ±μ΄ κΆμ₯λμ§ μμΌλ©΄ μ½λλ² μ΄μ€κ° λΆνμν CSSλ‘ μΈν μΆκ° ν½μ°½μΌλ‘ λλ κ°λ₯μ±μ΄ λκΈ° λλ¬Έμ λΆνμν μ²λ¦¬κ° λ°μν μλ μμ΅λλ€. 2kbλ§νΌ ν΄λ‘μ§ μκ³ νμ₯/μμ±λ§νΌ μ²λ¦¬λμ§ μμ μλ μμ§λ§ μ½λ μ μ§ κ΄λ¦¬λ μ¬κΈ°μμ ν μμΈμ λλ€. κ²°λ‘ μ μΌλ‘, λ΄ μΆλ‘ λ κ·Έλ κ² κ°λ ₯νμ§ μμ μ μμ§λ§ μμ μλ μ΅μ μ λν κ·Έλ κ² κ°λ ₯νμ§ μμ μΆλ‘ μμμ... λλ κ΅°μ€μ΄ μνλ κ²μ μ 곡νλ€κ³ λ§ν©λλ€! :λ
νμ₯ λ° μμ±μ΄ κΈ°λ³Έμ μΌλ‘ ν¬ν¨λμ΄μΌ νλ€λ λ° λμν©λλ€. κ·Έλ° κΈ°λ³Έμ μΈ κΈ°λ₯λ€μ΄ μ κ° JSSλ₯Ό μ¬μ©νλ μ΄μ μ λλ€. μκ·λͺ¨ νλ‘μ νΈμμλ μ¬μ©ν μ μκ³ μ¬μ©μ μ§μ μ€μΉκ° λΉκ΅μ μ€λ 걸리기 λλ¬Έμ λ€μ μΆκ°λλ κ²μ λ³΄κ³ μΆμ΅λλ€.
@AdamWhitehurst μ΄ λ¬Έμ μ μ°¬μ±νλ₯Ό λμ§ μ μμ΅λκΉ? λ λμ μ μΆ©μμ λ§λλ λ° λμμ΄ λ κ²μ λλ€. :).
λ€μ κ°μ€μΉ μ°¨μμ κ³ λ €ν΄μΌ νλ€κ³ μκ°ν©λλ€.
κ²°κ΅ νΈμν° μ€λ¬Έμ‘°μ¬λ₯Ό μ€μν μ μκ² λμμ΅λλ€ π€.
νμ₯/μμ± νλ¬κ·ΈμΈμ΄ μ€μΉλ κ²½μ° λ°νμ λΉμ©μ κ±°μ 0μ΄κ³ extend
λλ composes
μμ±μ΄ μ μλμ΄ μλμ§ νμΈν©λλ€. κ·Έλ μ§ μμΌλ©΄ μ무 μμ
λ μννμ§ μμ΅λλ€.
μμ ν, λλ 첫 λ²μ§Έ κ²μλ¬Όμ μ°¬μ±νλ₯Ό λμ‘μ΅λλ€. κ·Έκ² λ¬΄μ¨ λ§μΈκ°μ? λλ μ΄ λͺ¨λ κ²μ μ΅μνμ§ μμΌλ, μ°Έμμ£ΌμΈμ. νν.
λ΄ μ°¬μ±λ λ°μ
λ λ€λ₯Έ κ³ λ € μ¬νμ ν΄κ²° λ°©λ²μ μ±λ₯μ λλ€. λ΄ μ½λμ μ:
<Typography variant='h5' className={`${classes.sideLink} ${classes.leftSideLink}`} >About</Typography>
μ΄ ν΄κ²° λ°©λ²μ μννλ λ° λλ λΉμ©μ μΌλ§μ λκΉ?
νμ₯ λ° μμ±μ λν μ΄ λ¬Έμ μ λν μμμ΄ μμ΅λκΉ? λ€λ₯Έ μ¬λλ€κ³Ό λ§μ°¬κ°μ§λ‘ λλ λν λ³λμ νλ¬κ·ΈμΈμ μ€μΉνκΈ° μν΄ λ¬Έμλ₯Ό λ°λ₯Ό μ μμμ΅λλ€. μμ λ₯Ό 볡μ¬νμ§λ§ StylesProviderμ λ¬Έμ κ° λ°μνμ΅λλ€.
@gabrielliwerant μ νλ¬κ·ΈμΈμ μ½κ² μΆκ°ν μ μμ΄μΌ ν©λλ€. Material-UIκ° μ€νμ μ€ν¨νλ©΄ μ΄ λ¬Έμ μ μ§μ€ν΄μΌ ν©λλ€.
μ΄λ―Έ 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> ); }
μ΄ μ루μ
μ μλνμ§λ§ μ΄ λ²μ μμλ jss-plugin-extendλ§ μλνκ³ λͺ¨λ λ΄μ₯ νλ¬κ·ΈμΈ( ... jssPreset ().plugins
)μ λ§μΉ μ‘΄μ¬νμ§ μλ κ²μ²λΌ μλνμ§ μμ΅λλ€. μ¬λ£ UI v4.5, jss v10
μ΄κ²μ λλ₯Ό μν΄ μλνλ μ루μ μ λλ€.
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
μ κ°μ μ¬μ©μ μ μ JSS νλ¬κ·ΈμΈμ nextJSλ‘ μΆκ°νλ λ°©λ²μ λν μκ° μμ΅λκΉ?
@guiihlopes RTL κ°μ΄λλ₯Ό λ°λ₯΄λ κ²μ΄ μ’μ΅λλ€. https://material-ui.com/guides/right-to-left/#3 -jss-rtlκ³Ό λΉμ·ν΄μΌ ν©λλ€.
@guiihlopes RTL κ°μ΄λλ₯Ό λ°λ₯΄λ κ²μ΄ μ’μ΅λλ€. 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
μλνμ§ μλ μ΄μ λ₯Ό μκ³ 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
μ νμ₯ νλ¬κ·ΈμΈμ μΆκ°ν μ μμ§λ§ MUIμ JSS μ€νμΌμ λν μ ν μ μ TSλ νμ₯ ꡬ문μ νμ©νμ§ μμ΅λλ€.
StyleProvider
μ νμ₯ νλ¬κ·ΈμΈμ μΆκ°ν μ μμ§λ§ MUIμ JSS μ€νμΌμ λν μ ν μ μ TSλ νμ₯ ꡬ문μ νμ©νμ§ μμ΅λλ€.
@mifrej κ° λ§λ κ² κ°μμ. μ¬κΈ°μ μΈκΈλ κ±°μ λͺ¨λ λ°©λ²μ μλνμ§λ§ λ μ΄μ μλνμ§ μμ΅λλ€. μ΄μ©λ©΄ κ·Έλ€μ μ μ μΌμ μ¬μ©ν©λλ€!
κ°μ₯ μ μ©ν λκΈ
:+1: κ·Έ λ κ°λ₯Ό λ€μ μΆκ°ν λ(νμ₯ λ° μμ±). κ·Έλ€μ λ¨μ§ 2KB IMOμ λν΄ νμ€ν κ°μΉκ° μμ΅λλ€.