Fix ReactMarkupChecksum.addChecksumToMarkup() adds checksum to comments
`ReactMarkupChecksum.addChecksumToMarkup()` should not add checksum to comment markup, which is generated from components returns null. This fixes #6209.
Jaeho Lee committed
Mar 10, 2016 at 17:21 UTC
f30fb748f81693fbf9e94f64d0313ca103e3295e
2 files changed
+21
-5
src/renderers/dom/server/ReactMarkupChecksum.js
+11
-5
@@ -14,6 +14,8 @@
14
var adler32 = require('adler32');
15
16
var TAG_END = /\/?>/;
17
+var COMMENT_START = /^<\!\-\-/;
18
+
19
20
var ReactMarkupChecksum = {
21
CHECKSUM_ATTR_NAME: 'data-react-checksum',
@@ -25,11 +27,15 @@ var ReactMarkupChecksum = {
27
addChecksumToMarkup: function(markup) {
28
var checksum = adler32(markup);
29
28
- // Add checksum (handle both parent tags and self-closing tags)
29
- return markup.replace(
30
- TAG_END,
31
- ' ' + ReactMarkupChecksum.CHECKSUM_ATTR_NAME + '="' + checksum + '"$&'
32
- );
30
+ // Add checksum (handle both parent tags, comments and self-closing tags)
31
+ if (markup.test(COMMENT_START)) {
32
+ return markup;
33
+ } else {
34
+ return markup.replace(
35
+ TAG_END,
36
+ ' ' + ReactMarkupChecksum.CHECKSUM_ATTR_NAME + '="' + checksum + '"$&'
37
+ );
38
+ }
39
},
40
41
/**
src/renderers/dom/server/__tests__/ReactServerRendering-test.js
+10
@@ -74,6 +74,16 @@ describe('ReactServerRendering', function() {
74
);
75
});
76
77
+ it('should generate comment markup for component returns null', function() {
78
+ var NullComponent = React.createClass({
79
+ render: function() {
80
+ return null;
81
+ },
82
+ });
83
+ var response = ReactServerRendering.renderToString(<NullComponent />);
84
+ expect(response).toBe('<!-- react-empty: 1 -->');
85
+ });
86
+
87
it('should not register event listeners', function() {
88
var EventPluginHub = require('EventPluginHub');
89
var cb = jest.genMockFn();