Skip to content
This repository was archived by the owner on Dec 5, 2024. It is now read-only.

Commit 9763593

Browse files
piecykFezVrasta
authored andcommitted
perf: reduce Popper updates when placement don't change (#257)
1 parent 0f2485b commit 9763593

File tree

3 files changed

+30
-15
lines changed

3 files changed

+30
-15
lines changed

.size-snapshot.json

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,25 +1,25 @@
11
{
22
"dist/index.umd.js": {
3-
"bundled": 49749,
4-
"minified": 17751,
5-
"gzipped": 5578
3+
"bundled": 49677,
4+
"minified": 17705,
5+
"gzipped": 5564
66
},
77
"dist/index.umd.min.js": {
8-
"bundled": 24376,
9-
"minified": 10020,
10-
"gzipped": 3347
8+
"bundled": 24304,
9+
"minified": 9974,
10+
"gzipped": 3334
1111
},
1212
"dist/index.esm.js": {
13-
"bundled": 10105,
14-
"minified": 5808,
15-
"gzipped": 1838,
13+
"bundled": 10033,
14+
"minified": 5762,
15+
"gzipped": 1825,
1616
"treeshaked": {
1717
"rollup": {
18-
"code": 4604,
18+
"code": 4558,
1919
"import_statements": 137
2020
},
2121
"webpack": {
22-
"code": 5725
22+
"code": 5679
2323
}
2424
}
2525
}

src/Popper.js

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -91,10 +91,7 @@ export class InnerPopper extends React.Component<PopperProps, PopperState> {
9191
order: 900,
9292
fn: (data: Object) => {
9393
const { placement } = data;
94-
this.setState(
95-
{ data, placement },
96-
placement !== this.state.placement ? this.scheduleUpdate : undefined
97-
);
94+
this.setState({ data, placement });
9895
return data;
9996
},
10097
};

src/Popper.test.js

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -115,4 +115,22 @@ describe('Popper component', () => {
115115
virtualReferenceElement
116116
);
117117
});
118+
119+
it(`should render 3 times when placement is changed`, () => {
120+
const referenceElement = document.createElement('div');
121+
let renderCounter = 0;
122+
const wrapper = mount(
123+
<InnerPopper placement="top" referenceElement={referenceElement}>
124+
{({ ref, style, placement }) => {
125+
renderCounter++;
126+
return <div ref={ref} style={style} data-placement={placement} />;
127+
}}
128+
</InnerPopper>
129+
);
130+
expect(renderCounter).toBe(3);
131+
renderCounter = 0;
132+
133+
wrapper.setProps({ placement: 'bottom' });
134+
expect(renderCounter).toBe(3);
135+
});
118136
});

0 commit comments

Comments
 (0)