Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings
This repository was archived by the owner on May 14, 2020. It is now read-only.

Commit a25890f

Browse files
committed
prevent redundant state change for nested node
1 parent 2ffba79 commit a25890f

File tree

2 files changed

+22
-6
lines changed

2 files changed

+22
-6
lines changed

‎src/JSONNestedNode.js‎

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -68,6 +68,14 @@ function getStateFromProps(props) {
6868
};
6969
}
7070

71+
function propsAreNotEqual(props, nextProps, keys) {
72+
return keys.find(k => nextProps[k] !== props[k]);
73+
}
74+
75+
function keyPathIsNotEqual(keyPath, nextKeyPath) {
76+
return keyPath.join('/') !== nextKeyPath.join('/');
77+
}
78+
7179
export default class JSONNestedNode extends React.Component {
7280
static propTypes = {
7381
getItemString: PropTypes.func.isRequired,
@@ -102,8 +110,11 @@ export default class JSONNestedNode extends React.Component {
102110
}
103111

104112
componentWillReceiveProps(nextProps) {
105-
if (['shouldExpandNode', 'isCircular', 'keyPath', 'data', 'level'].find(k =>
106-
nextProps[k] !== this.props[k])
113+
if (
114+
propsAreNotEqual(
115+
this.props, nextProps, ['shouldExpandNode', 'isCircular', 'level']
116+
) ||
117+
keyPathIsNotEqual(this.props.keyPath, nextProps.keyPath)
107118
) {
108119
this.setState(getStateFromProps(nextProps));
109120
}

‎src/index.js‎

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,11 @@ import JSONNode from './JSONNode';
88
import createStylingFromTheme from './createStylingFromTheme';
99

1010
const identity = value => value;
11+
const expandRootNode = (keyName, data, level) => level === 0;
12+
const defaultItemString = (type, data, itemType, itemString) =>
13+
<span>{itemType} {itemString}</span>;
14+
const defaultLabelRenderer = ([label]) => <span>{label}:</span>;
15+
const noCustomNode = () => false;
1116

1217
function checkLegacyTheming(theme, props) {
1318
const deprecatedStylingMethodsMap = {
@@ -65,14 +70,14 @@ export default class JSONTree extends React.Component {
6570
};
6671

6772
static defaultProps = {
68-
shouldExpandNode: (keyName,data,level)=>level===0,// expands root by default,
73+
shouldExpandNode: expandRootNode,
6974
hideRoot: false,
7075
keyPath: ['root'],
71-
getItemString: (type,data,itemType,itemString)=><span>{itemType}{itemString}</span>,
72-
labelRenderer: ([label])=><span>{label}:</span>,
76+
getItemString: defaultItemString,
77+
labelRenderer: defaultLabelRenderer,
7378
valueRenderer: identity,
7479
postprocessValue: identity,
75-
isCustomNode: ()=>false,
80+
isCustomNode: noCustomNode,
7681
collectionLimit: 50,
7782
invertTheme: true
7883
};

0 commit comments

Comments
(0)

AltStyle によって変換されたページ (->オリジナル) /