Skip to content

Commit 1ac2e22

Browse files
authored
Merge pull request #14 from cssinjs/feature/optimize-performance
Rewrite filterProps and createStyled, fix tests
2 parents ad7bcb4 + f74298d commit 1ac2e22

4 files changed

Lines changed: 35 additions & 19 deletions

File tree

src/createStyled.js

Lines changed: 13 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -9,9 +9,18 @@ import type {
99
TagNameOrStyledElementType
1010
} from './types'
1111

12-
const createStyled = (jss: Function) => (
13-
baseStyles: BaseStylesType = {}
14-
): StyledType => {
12+
const getStyledArgs = (
13+
tagNameOrStyledElement: TagNameOrStyledElementType
14+
): StyledElementAttrsType => {
15+
if (typeof tagNameOrStyledElement === 'string') {
16+
return {tagName: tagNameOrStyledElement, style: {}}
17+
}
18+
19+
const {tagName, style} = tagNameOrStyledElement
20+
return {tagName, style}
21+
}
22+
23+
const createStyled = (jss: Function) => (baseStyles: BaseStylesType = {}): StyledType => {
1524
let staticSheet
1625
let dynamicSheet
1726

@@ -34,10 +43,7 @@ const createStyled = (jss: Function) => (
3443
tagNameOrStyledElement: TagNameOrStyledElementType,
3544
ownStyle: ComponentStyleType
3645
): StyledElementType => {
37-
const {tagName, style}: StyledElementAttrsType = typeof tagNameOrStyledElement === 'string'
38-
? {tagName: tagNameOrStyledElement, style: {}}
39-
: tagNameOrStyledElement
40-
46+
const {tagName, style} = getStyledArgs(tagNameOrStyledElement)
4147
const elementStyle = {...style, ...ownStyle}
4248

4349
return styled({tagName, baseStyles, elementStyle, mountSheets})

src/tests/__snapshots__/index.spec.jsx.snap

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,8 @@ exports[`test renders correctly App with default Styled 1`] = `
99
</h1>
1010
</header>
1111
<section
12-
className="section-11-0-12">
12+
className="section-11-0-12"
13+
data-name="content">
1314
<button
1415
className="button-14-0-13 button-15-0-14">
1516
primitive test
@@ -37,7 +38,8 @@ exports[`test renders correctly App with default styled 1`] = `
3738
</h1>
3839
</header>
3940
<section
40-
className="section-3-0-3">
41+
className="section-3-0-3"
42+
data-name="content">
4143
<button
4244
className="button-6-0-4 button-7-0-5">
4345
primitive test
@@ -67,7 +69,8 @@ exports[`test renders correctly App with injectStyled 1`] = `
6769
</h1>
6870
</header>
6971
<section
70-
className="section-19-0-22">
72+
className="section-19-0-22"
73+
data-name="content">
7174
<button
7275
className="button-22-0-23 button-23-0-24">
7376
primitive test

src/tests/index.spec.jsx

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
import 'react-dom'
12
import renderer from 'react-test-renderer'
23
import React from 'react'
34

src/utils/filterProps.js

Lines changed: 15 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,16 @@
1-
import isNativeProp from 'is-react-prop'
1+
import isReactProp from 'is-react-prop'
22

3-
export default (props: Object) => (
4-
Object
5-
.entries(props)
6-
.reduce((acc, [name, value]) => (isNativeProp(name)
7-
? {...acc, [name]: value}
8-
: acc
9-
), {})
10-
)
3+
export default (props: Object) => {
4+
const filtered = {}
5+
const propNames = Object.keys(props)
6+
let name
7+
8+
for (let i = 0; i < propNames.length; i++) {
9+
name = propNames[i]
10+
if (isReactProp(name)) {
11+
filtered[name] = props[name]
12+
}
13+
}
14+
15+
return filtered
16+
}

0 commit comments

Comments
 (0)