Skip to content

Commit 2f07935

Browse files
committed
Merge pull request #4588 from sebmarkbage/ownersforcontext
Add property key names + type of value to fragment warning
2 parents f3440c0 + 754ee17 commit 2f07935

File tree

2 files changed

+17
-5
lines changed

2 files changed

+17
-5
lines changed

src/addons/ReactFragment.js

Lines changed: 11 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -83,13 +83,17 @@ if (__DEV__) {
8383

8484
var issuedWarnings = {};
8585

86-
var didWarnForFragment = function(fragment) {
87-
// We use the keys and the type of the value as a heuristic to dedupe the
88-
// warning to avoid spamming too much.
86+
var getFragmentKeyString = function(fragment) {
8987
var fragmentCacheKey = '';
9088
for (var key in fragment) {
9189
fragmentCacheKey += key + ':' + (typeof fragment[key]) + ',';
9290
}
91+
return fragmentCacheKey;
92+
};
93+
94+
var didWarnForFragment = function(fragmentCacheKey) {
95+
// We use the keys and the type of the value as a heuristic to dedupe the
96+
// warning to avoid spamming too much.
9397
var alreadyWarnedOnce = !!issuedWarnings[fragmentCacheKey];
9498
issuedWarnings[fragmentCacheKey] = true;
9599
return alreadyWarnedOnce;
@@ -143,11 +147,13 @@ var ReactFragment = {
143147
if (__DEV__) {
144148
if (canWarnForReactFragment) {
145149
if (!fragment[fragmentKey]) {
150+
var fragmentKeys = getFragmentKeyString(fragment);
146151
warning(
147-
didWarnForFragment(fragment),
152+
didWarnForFragment(fragmentKeys),
148153
'Any use of a keyed object should be wrapped in ' +
149154
'React.addons.createFragment(object) before being passed as a ' +
150-
'child.'
155+
'child. {%s}',
156+
fragmentKeys
151157
);
152158
return fragment;
153159
}

src/addons/__tests__/ReactFragment-test.js

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,9 @@ describe('ReactFragment', function() {
3232
expect(console.error.calls[0].args[0]).toContain(
3333
'Any use of a keyed object'
3434
);
35+
expect(console.error.calls[0].args[0]).toContain(
36+
'{x:object,y:object,}'
37+
);
3538
// Only warn once for the same set of children
3639
var sameChildren = {
3740
x: <span />,
@@ -56,6 +59,9 @@ describe('ReactFragment', function() {
5659
expect(console.error.calls[0].args[0]).toContain(
5760
'Any use of a keyed object'
5861
);
62+
expect(console.error.calls[0].args[0]).toContain(
63+
'{x:object,y:object,z:object,}'
64+
);
5965
});
6066

6167
it('should warn if a plain object even if it is in an owner', function() {

0 commit comments

Comments
 (0)