From f546818518a8e55162961a104b1a512225dcda62 Mon Sep 17 00:00:00 2001 From: Vitaliy Mazurenko Date: Sat, 14 Jul 2018 14:01:52 +0300 Subject: [PATCH] fix: #285 react-css-modules causes modifying key property of the component children --- src/linkClass.js | 2 +- tests/linkClass.js | 16 ++++++++++++++++ 2 files changed, 17 insertions(+), 1 deletion(-) diff --git a/src/linkClass.js b/src/linkClass.js index 4618446..73783b4 100644 --- a/src/linkClass.js +++ b/src/linkClass.js @@ -50,7 +50,7 @@ const linkElement = (element: ReactElement, styles: Object, configuration: Objec if (React.isValidElement(children)) { elementShallowCopy.props.children = linkElement(React.Children.only(children), styles, configuration); } else if (_.isArray(children) || isIterable(children)) { - elementShallowCopy.props.children = React.Children.map(children, (node) => { + elementShallowCopy.props.children = _.map(children, (node) => { if (React.isValidElement(node)) { // eslint-disable-next-line no-use-before-define return linkElement(React.Children.only(node), styles, configuration); diff --git a/tests/linkClass.js b/tests/linkClass.js index 6a13f21..90a66b2 100644 --- a/tests/linkClass.js +++ b/tests/linkClass.js @@ -141,6 +141,22 @@ describe('linkClass', () => { expect(subject.props.children[0].props).not.to.have.property('styleName'); expect(subject.props.children[1].props).not.to.have.property('styleName'); }); + it('preserves original keys', () => { + let subject; + + subject =
+

+

+

; + + subject = linkClass(subject, { + bar: 'bar-1', + foo: 'foo-1' + }); + + expect(subject.props.children[0].key).to.equal('1'); + expect(subject.props.children[1].key).to.equal('2'); + }); }); context('when multiple descendants have styleName and are iterable', () => { it('assigns a generated className', () => {