Skip to content

Commit 622ddef

Browse files
Optimize large list performance (#250)
1 parent b144261 commit 622ddef

File tree

2 files changed

+5
-2
lines changed

2 files changed

+5
-2
lines changed

src/js/CheckboxTree.js

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
import classNames from 'classnames';
22
import isEqual from 'lodash/isEqual';
3+
import memoize from 'lodash/memoize';
34
import { nanoid } from 'nanoid';
45
import PropTypes from 'prop-types';
56
import React from 'react';
@@ -102,6 +103,8 @@ class CheckboxTree extends React.Component {
102103
this.onNodeClick = this.onNodeClick.bind(this);
103104
this.onExpandAll = this.onExpandAll.bind(this);
104105
this.onCollapseAll = this.onCollapseAll.bind(this);
106+
107+
this.combineMemorized = memoize((icons1, icons2) => ({ ...icons1, ...icons2 })).bind(this);
105108
}
106109

107110
// eslint-disable-next-line react/sort-comp
@@ -250,7 +253,7 @@ class CheckboxTree extends React.Component {
250253
expandOnClick={expandOnClick}
251254
expanded={flatNode.expanded}
252255
icon={node.icon}
253-
icons={{ ...defaultIcons, ...icons }}
256+
icons={this.combineMemorized(defaultIcons, icons)}
254257
label={node.label}
255258
lang={lang}
256259
optimisticToggle={optimisticToggle}

src/js/TreeNode.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ import NativeCheckbox from './NativeCheckbox';
77
import iconsShape from './shapes/iconsShape';
88
import languageShape from './shapes/languageShape';
99

10-
class TreeNode extends React.Component {
10+
class TreeNode extends React.PureComponent {
1111
static propTypes = {
1212
checked: PropTypes.number.isRequired,
1313
disabled: PropTypes.bool.isRequired,

0 commit comments

Comments
 (0)