Skip to content

Commit 6ed69e7

Browse files
committed
fix(createUseStyles): move memoize getSheetClasses to createUseStyles
1 parent 426803c commit 6ed69e7

File tree

3 files changed

+52
-44
lines changed

3 files changed

+52
-44
lines changed

packages/react-jss/.size-snapshot.json

+13-13
Original file line numberDiff line numberDiff line change
@@ -1,30 +1,30 @@
11
{
22
"react-jss.js": {
3-
"bundled": 135317,
4-
"minified": 49867,
5-
"gzipped": 16666
3+
"bundled": 135385,
4+
"minified": 49908,
5+
"gzipped": 16677
66
},
77
"react-jss.min.js": {
8-
"bundled": 102267,
9-
"minified": 39726,
10-
"gzipped": 13789
8+
"bundled": 102335,
9+
"minified": 39767,
10+
"gzipped": 13792
1111
},
1212
"react-jss.cjs.js": {
13-
"bundled": 21443,
14-
"minified": 9467,
15-
"gzipped": 3169
13+
"bundled": 21515,
14+
"minified": 9469,
15+
"gzipped": 3171
1616
},
1717
"react-jss.esm.js": {
18-
"bundled": 19531,
19-
"minified": 7973,
20-
"gzipped": 2952,
18+
"bundled": 19603,
19+
"minified": 7975,
20+
"gzipped": 2954,
2121
"treeshaked": {
2222
"rollup": {
2323
"code": 426,
2424
"import_statements": 368
2525
},
2626
"webpack": {
27-
"code": 2408
27+
"code": 1945
2828
}
2929
}
3030
}

packages/react-jss/src/createUseStyles.js

+37-28
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ import {
1212
import getSheetIndex from './utils/getSheetIndex'
1313
import {manageSheet, unmanageSheet} from './utils/managers'
1414
import getSheetClasses from './utils/getSheetClasses'
15+
import memoize from './utils/memoizeOne'
1516

1617
const useEffectOrLayoutEffect = isInBrowser ? React.useLayoutEffect : React.useEffect
1718

@@ -21,49 +22,57 @@ const createUseStyles = (styles, options = {}) => {
2122
const {index = getSheetIndex(), theming, name, ...sheetOptions} = options
2223
const ThemeContext = (theming && theming.context) || DefaultThemeContext
2324

24-
const useTheme = (theme) => {
25+
const useTheme = theme => {
2526
if (typeof styles === 'function') {
2627
return theme || React.useContext(ThemeContext) || noTheme
2728
}
2829

2930
return noTheme
3031
}
3132

33+
const memoizedGetSheetClasses = memoize(getSheetClasses)
34+
3235
return function useStyles(data) {
3336
const isFirstMount = React.useRef(true)
3437
const context = React.useContext(JssContext)
3538
const theme = useTheme(data && data.theme)
3639

37-
const [sheet, dynamicRules] = React.useMemo(() => {
38-
const newSheet = createStyleSheet({
39-
context,
40-
styles,
41-
name,
42-
theme,
43-
index,
44-
sheetOptions
45-
})
46-
47-
const newDynamicRules = newSheet ? addDynamicRules(newSheet, data) : null
48-
49-
if (newSheet) {
50-
manageSheet({
51-
index,
40+
const [sheet, dynamicRules] = React.useMemo(
41+
() => {
42+
const newSheet = createStyleSheet({
5243
context,
53-
sheet: newSheet,
54-
theme
44+
styles,
45+
name,
46+
theme,
47+
index,
48+
sheetOptions
5549
})
56-
}
5750

58-
return [newSheet, newDynamicRules]
59-
}, [context, theme])
51+
const newDynamicRules = newSheet ? addDynamicRules(newSheet, data) : null
6052

61-
useEffectOrLayoutEffect(() => {
62-
// We only need to update the rules on a subsequent update and not in the first mount
63-
if (sheet && dynamicRules && !isFirstMount.current) {
64-
updateDynamicRules(data, sheet, dynamicRules)
65-
}
66-
}, [data])
53+
if (newSheet) {
54+
manageSheet({
55+
index,
56+
context,
57+
sheet: newSheet,
58+
theme
59+
})
60+
}
61+
62+
return [newSheet, newDynamicRules]
63+
},
64+
[context, theme]
65+
)
66+
67+
useEffectOrLayoutEffect(
68+
() => {
69+
// We only need to update the rules on a subsequent update and not in the first mount
70+
if (sheet && dynamicRules && !isFirstMount.current) {
71+
updateDynamicRules(data, sheet, dynamicRules)
72+
}
73+
},
74+
[data]
75+
)
6776

6877
useEffectOrLayoutEffect(
6978
() =>
@@ -85,7 +94,7 @@ const createUseStyles = (styles, options = {}) => {
8594
[sheet]
8695
)
8796

88-
const classes = sheet && dynamicRules ? getSheetClasses(sheet, dynamicRules) : {}
97+
const classes = sheet && dynamicRules ? memoizedGetSheetClasses(sheet, dynamicRules) : {}
8998

9099
React.useDebugValue(classes)
91100

packages/react-jss/src/utils/getSheetClasses.js

+2-3
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
import {getMeta} from './sheetsMeta'
2-
import memoize from './memoizeOne'
32

4-
const getSheetClasses = memoize((sheet, dynamicRules) => {
3+
const getSheetClasses = (sheet, dynamicRules) => {
54
if (!dynamicRules) {
65
return sheet.classes
76
}
@@ -22,6 +21,6 @@ const getSheetClasses = memoize((sheet, dynamicRules) => {
2221
}
2322

2423
return classes
25-
})
24+
}
2625

2726
export default getSheetClasses

0 commit comments

Comments
 (0)