Skip to content

Commit 5d38d68

Browse files
committed
fix: #1597 split useEffect
1 parent 359b559 commit 5d38d68

2 files changed

Lines changed: 53 additions & 52 deletions

File tree

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

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,23 +1,23 @@
11
{
22
"react-jss.js": {
3-
"bundled": 136030,
4-
"minified": 50117,
5-
"gzipped": 16723
3+
"bundled": 136158,
4+
"minified": 50189,
5+
"gzipped": 16746
66
},
77
"react-jss.min.js": {
8-
"bundled": 102980,
9-
"minified": 39976,
10-
"gzipped": 13837
8+
"bundled": 103108,
9+
"minified": 40048,
10+
"gzipped": 13863
1111
},
1212
"react-jss.cjs.js": {
13-
"bundled": 21554,
14-
"minified": 9502,
15-
"gzipped": 3177
13+
"bundled": 21680,
14+
"minified": 9599,
15+
"gzipped": 3203
1616
},
1717
"react-jss.esm.js": {
18-
"bundled": 19636,
19-
"minified": 8002,
20-
"gzipped": 2959,
18+
"bundled": 19766,
19+
"minified": 8102,
20+
"gzipped": 2987,
2121
"treeshaked": {
2222
"rollup": {
2323
"code": 426,

packages/react-jss/src/createUseStyles.js

Lines changed: 41 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -35,57 +35,58 @@ const createUseStyles = (styles, options = {}) => {
3535
const isFirstMount = React.useRef(true)
3636
const context = React.useContext(JssContext)
3737
const theme = useTheme(data && data.theme)
38+
const [dynamicRules, setDynamicRules] = React.useState()
3839

39-
const [sheet, dynamicRules] = React.useMemo(() => {
40-
const newSheet = createStyleSheet({
41-
context,
42-
styles,
43-
name,
44-
theme,
45-
index,
46-
sheetOptions
47-
})
40+
const sheet = React.useMemo(
41+
() =>
42+
createStyleSheet({
43+
context,
44+
styles,
45+
name,
46+
theme,
47+
index,
48+
sheetOptions
49+
}),
50+
[context, styles, name, theme, index, sheetOptions]
51+
)
4852

49-
const newDynamicRules = newSheet ? addDynamicRules(newSheet, data) : null
53+
useEffectOrLayoutEffect(() => {
54+
const newDynamicRules = sheet ? addDynamicRules(sheet, data) : null
55+
setDynamicRules(newDynamicRules)
5056

51-
if (newSheet) {
52-
manageSheet({
53-
index,
54-
context,
55-
sheet: newSheet,
56-
theme
57-
})
57+
return () => {
58+
if (sheet && newDynamicRules) {
59+
removeDynamicRules(sheet, newDynamicRules)
60+
}
5861
}
62+
}, [sheet, data])
5963

60-
return [newSheet, newDynamicRules]
61-
}, [context, theme])
64+
useEffectOrLayoutEffect(() => {
65+
manageSheet({
66+
index,
67+
context,
68+
sheet,
69+
theme
70+
})
71+
72+
return () => {
73+
if (sheet) {
74+
unmanageSheet({
75+
index,
76+
context,
77+
sheet,
78+
theme
79+
})
80+
}
81+
}
82+
}, [index, context, sheet, theme])
6283

6384
useEffectOrLayoutEffect(() => {
6485
// We only need to update the rules on a subsequent update and not in the first mount
6586
if (sheet && dynamicRules && !isFirstMount.current) {
6687
updateDynamicRules(data, sheet, dynamicRules)
6788
}
68-
}, [data])
69-
70-
useEffectOrLayoutEffect(
71-
() =>
72-
// cleanup only
73-
() => {
74-
if (sheet) {
75-
unmanageSheet({
76-
index,
77-
context,
78-
sheet,
79-
theme
80-
})
81-
}
82-
83-
if (sheet && dynamicRules) {
84-
removeDynamicRules(sheet, dynamicRules)
85-
}
86-
},
87-
[sheet]
88-
)
89+
}, [data, sheet, dynamicRules, isFirstMount])
8990

9091
const classes = React.useMemo(
9192
() => (sheet && dynamicRules ? getSheetClasses(sheet, dynamicRules) : emptyObject),

0 commit comments

Comments
 (0)