#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-beta.22 |
| React | 16.0.0 |
| ãã©ãŠã¶| ChromeããŒãžã§ã³62.0.3202.94ïŒå
¬åŒãã«ãïŒïŒ64ãããïŒ|
@tdkn jss-extendãã©ã°ã€ã³ãããŒãããŠããŸããïŒ 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'))
ãããã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è¯ãç¹ã @kofïŒ
@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
ããããç§ã¯ãµãŒããŒåŽã®ã¬ã³ããªã³ã°ã䜿çšããŠããŠããããæ©èœãããããšãã§ããŸããã§ããã
PSïŒãããã®ãã©ã°ã€ã³ã2kbã§åé€ãã䟡å€ããããã©ããã¯ããããŸããããããã¯ã誰ãã䜿çšããå¿ èŠã®ããæ¬åœã«çŽ æŽãããæ©èœã ããã§ãð
次ã«ãæ¡åŒµãšäœæã¯JSSã®IMHOã«äžå¯æ¬ ãªããŒã«ã§ããã2kbã®äŸ¡å€ã¯ãããŸããã
ã¬ã³ããªã³ã°ã©ã³ã¿ã€ã ã®ãªãŒããŒããããå®éåããå¿ èŠããããŸãã ãã³ãã«ãµã€ãºã ãã§ã¯ãããŸããã
muiã®å Žåã¯ãŸã ãªãã·ã§ã³ãªã®ã§ããªãŒããŒããããå¢ããããšãããã£ãå Žåã¯ãclassNamesã©ã€ãã©ãªãšspreadæŒç®åãåŒãç¶ã䜿çšã§ããŸãããããã»ã©å€§ããªéãã¯ãªããšæããŸãã
ããã¥ã¡ã³ãã«åŸã£ãŠjss-rtlãã©ã°ã€ã³ãæå¹ã«ããã®ãšãŸã£ããåãæ¹æ³ã§jss-extendãã©ã°ã€ã³ãæå¹ã«ããããšããŠããŸããã åãã³ãŒãã§ããããã©ã°ã€ã³ã«é¢é£ãããã¹ãŠã®jss-extendåŒã³åºãã眮ãæããŸããã ããããæåããŸããã§ããã å®éã«æ¡åŒµããå¿ èŠã®ããã«ãŒã«ã¯åœ±é¿ãåããŸããã 誰ããæçµçã«ãããæãéããããšãã§ããã§ããããïŒ
ãããŒãæåŸã®åæ¥ã¯jss-extendãmaterial-uiã§äœ¿çšããæ¹æ³ã«è²»ãããŸããããã®äŸã¯ãã©ããã«ãããŸãã
cssLabel: {
"&$cssFocused": {
color: grey[500]
}
},
cssFocused: {
backgroundColor: blue[500]
},
ããã§ã "&$cssFocused
ã¯extendã®ããã«ãªããŸãïŒcssFocusedã ããããããã§ã¯ãããŸããã ããã§ããããã©ã®ããã«è¡ãã®ã§ããïŒ
@nsaubiã¯ãã¹ãæ©èœã«ã€ããŠè©±ããŠããŠãsassãšåãããã«ãå å«ã«ãŒã«ã»ã¬ã¯ã¿ãŒã«çœ®ãæããããŠããŸãã
jss-extend / composeãå°æ¥æšæºã«ãªããã©ããã«ã€ããŠã®æ å ±ã¯ãããŸããïŒ
jssã³ãŒããããã¯ãªãŒã³ãªimoã«èŠããããã«ãextendãå ã«æ»ãããšãé¡ã£ãŠããŸãã
++ïŒ1ïŒ
2kbã¯å®éã«ã¯éèŠã§ã¯ãããŸããã å°æ¥çã«ã¯ããæ¡åŒµããŠæ§æããããšããåªããã³ãŒãã£ã³ã°ãã¿ãŒã³ã確ç«ããããšãããéèŠã ãšæããŸãã
@oliviertassinariããããè¿œå ãçŽããŠãå®éã«ãããã®å®å
šãªãµããŒããè¿œå ããããšãè©äŸ¡ããŠããã ããŸããïŒ
@gitsupersmecher JssProvider
ã³ã³ããŒãã³ãã䜿çšããŠãã©ã°ã€ã³ãJSSã«è¿œå ããããšã«ããããæ¡åŒµããã³äœæããå®å
šã«ãµããŒãã§ããŸãã ã»ãšãã©ã®äººã¯ãªãã§ããŸããã£ãŠããããšãã§ããŸãã + 2kbãã³ãã«ã®å¢å ã¯åé¡ã®äžæ¹ã®åŽé¢ã§ãããå®è¡æã®ã³ã¹ãã¯ããäžæ¹ã®åŽé¢ã§ãã
ããã2ã®å Žåãå®è¡æã®ã³ã¹ãã¯ã»ãšãã©ç®ç«ããªããšæããŸãããŸãããããªãã¯APIã®äžéšãšããŠã¹ã¿ã€ãªã³ã°ãäœæããéåžžã«äººæ°ã®ããããšãªã®ã§ãããã«æ°kbãè¿œå ãã䟡å€ããããšæããŸãã
ãã ããextendã®ä»£ããã«ãspreadæŒç®åã䜿çšã§ããŸããããã¯ã»ãšãã©ã®å Žåãã«ããŒããclassNameãé£çµããããšã§ã³ã³ããŒãã³ãå ã§æ§æãè¡ãããšãã§ããŸãã
ïŒ+1ïŒããã2ã€ãå床远å ãããšïŒæ¡åŒµãšäœæïŒã ãã£ã2KBã®IMOã§ééããªã䟡å€ããããŸãã
ãã1ã€ã®ãªãã·ã§ã³ã¯ãå éšjssã€ã³ã¹ã¿ã³ã¹ãå®éã«é衚瀺ã«ããã¹ã¿ã€ã«èšå®ã«ç¬èªã®jssã»ããã¢ããã䜿çšããæ¹æ³ãéåžžã«æ確ã«ããããšã§ãã
ããã«ã¡ã¯ãnextjsãããžã§ã¯ãã«jss-extendãè¿œå ããããšããŠããŸããïŒjss-rtlãã©ã°ã€ã³ã®äŸã䜿çšïŒãæåããŸããã§ããã 誰ãããããæ©èœãããããšãã§ããŸããïŒ
^ãç¥ããã
ããã«ç§ãããŠããããšãæçš¿ããŸãã nextjsã®äŸã§ã¯ãã§ã«äœ¿çšãããŠãããããgenerateClassNameãå®è£ ããæ¹æ³ãããããŸããã
ãã®äŸãããŒã¹ã«ãããšïŒ
https://github.com/mui-org/material-ui/tree/master/examples/nextjs
æåã«jss-extendãã€ã³ã¹ããŒã«ããŸãnpm i --save jss-extend
/pages/_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ã»ã©æ害ã§ã¯ãªããextend / composeã»ã©åŠçãå°ãªããããããŸããããã³ãŒãã®ã¡ã³ããã³ã¹ãããã§ã®èŠå ã§ãã çµè«ãšããŠãç§ã®æšè«ãããã»ã©åŒ·åã§ã¯ãªããããããŸããããæå ã«ãããªãã·ã§ã³ã«ã€ããŠããã»ã©åŒ·åãªæšè«ããªãå Žåã¯...矀è¡ã«åœŒããæããã®ãäžãããšèšããŸãïŒ ïŒD
ç§ã¯ãextendãšcomposeãããã©ã«ãã§å«ãŸããã¹ãã§ããããšã«åæããŸãã ãããã¯ãã®ãããªåºæ¬çãªæ©èœã§ãããç§ãJSSã䜿çšããçç±ã§ãã å°ããªãããžã§ã¯ãã§ããããã䜿çšããå¯èœæ§ãé«ããã«ã¹ã¿ã ã€ã³ã¹ããŒã«ã¯æ¯èŒçé·ãã®ã§ãããããå床远å ãããã®ã楜ãã¿ã«ããŠããŸãã
@AdamWhitehurstãã®åé¡ã«è³æããŠããããŸããïŒ ããã¯ç§ãã¡ãããè¯ããã¬ãŒããªããããã®ãå©ããã§ããã:)ã
次ã®éã¿ä»ããã£ã¡ã³ã·ã§ã³ãèæ ®ããå¿ èŠããããšæããŸãã
æçµçã«ã¯ãTwitterã®æ祚ãå®è¡ããããšãã§ããŸãð€ã
æ¡åŒµ/äœæãã©ã°ã€ã³ãã€ã³ã¹ããŒã«ãããŠããå Žåã®å®è¡æã³ã¹ãã¯ã»ãŒ0ã§ããã extend
ãŸãã¯composes
ããããã£ãå®çŸ©ãããŠãããã©ããããã§ãã¯ããŸããå®çŸ©ãããŠããªãå Žåã¯ãäœãããŸããã
å šäœçã«ãç§ã¯æåã®æçš¿ã«è³æããŸãããããã¯ããªããæå³ããããšã§ããïŒ ç§ã¯ããããã¹ãŠã«å°ãæ £ããŠããªãã®ã§ãææ ¢ããŠãã ãããããã
ç§ã®è³æ祚ãåããŸã
ãã1ã€ã®èæ ®äºé ã¯ãããã©ãŒãã³ã¹ã®åé¿çã®çšåºŠã§ãã ç§ã®ã³ãŒãããã®äŸïŒ
<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
ïŒãååšããªããã®ããã«æ©èœããŸããã ãããªã¢ã«-uiv4.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ãã©ã°ã€ã³ã䜿çšããããšãå¯èœã§ããïŒ ããã¥ã¡ã³ãã¯å°ãå€ãããã§ãããextendãšcomposeã®åäœãåæ¢ãããœãªã¥ãŒã·ã§ã³ããããŸãã
ããã¯æèã®å€åã«ãããã®ã ãšæããŸãã ããã¯ç§ã®ã³ãŒããã©ã®ããã«èŠãããã§ãïŒ
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 nextJSã§jss-extend
ã®ãããªã«ã¹ã¿ã JSSãã©ã°ã€ã³ãè¿œå ããæ¹æ³ã®äŸã¯ãããŸããïŒ
@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
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
ã«extendãã©ã°ã€ã³ãè¿œå ããããšã¯ã§ããŸãããMUIã§ã®JSSã¹ã¿ã€ãªã³ã°ã®åå®çŸ©TSã§ã¯ãextendæ§æã䜿çšã§ããŸããã
StyleProvider
ã«extendãã©ã°ã€ã³ãè¿œå ããããšã¯ã§ããŸãããMUIã§ã®JSSã¹ã¿ã€ãªã³ã°ã®åå®çŸ©TSã§ã¯ãextendæ§æã䜿çšã§ããŸããã
@mifrejã¯æ£ãããšæããŸãã ç§ã¯ããã§èšåãããŠããã»ãšãã©ãã¹ãŠã®æ¹æ³ãè©ŠããŸãããããããã®ã©ããããæ©èœããŸããã ãã¶ã圌ãã¯ä»¥ååããŠããã®ã ããïŒ
æãåèã«ãªãã³ã¡ã³ã
ïŒ+1ïŒããã2ã€ãå床远å ãããšïŒæ¡åŒµãšäœæïŒã ãã£ã2KBã®IMOã§ééããªã䟡å€ããããŸãã