Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit 5474a83

Browse files
authored
Disable console.logs in the second render pass of DEV mode double render (facebook#18547)
* Disable console log during the second rerender * Use the disabled log to avoid double yielding values in scheduler mock * Reenable debugRenderPhaseSideEffectsForStrictMode in tests that can
1 parent b225d4f commit 5474a83

File tree

43 files changed

+221
-162
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

43 files changed

+221
-162
lines changed

packages/create-subscription/src/__tests__/createSubscription-test.internal.js

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,6 @@
1111

1212
let createSubscription;
1313
let BehaviorSubject;
14-
let ReactFeatureFlags;
1514
let React;
1615
let ReactNoop;
1716
let Scheduler;
@@ -21,8 +20,7 @@ describe('createSubscription', () => {
2120
beforeEach(() => {
2221
jest.resetModules();
2322
createSubscription = require('create-subscription').createSubscription;
24-
ReactFeatureFlags = require('shared/ReactFeatureFlags');
25-
ReactFeatureFlags.debugRenderPhaseSideEffectsForStrictMode = false;
23+
2624
React = require('react');
2725
ReactNoop = require('react-noop-renderer');
2826
Scheduler = require('scheduler');

packages/react-art/src/__tests__/ReactART-test.js

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -391,7 +391,7 @@ describe('ReactART', () => {
391391
</CurrentRendererContext.Provider>,
392392
);
393393

394-
expect(Scheduler).toFlushAndYieldThrough(__DEV__ ? ['A', 'A'] : ['A']);
394+
expect(Scheduler).toFlushAndYieldThrough(['A']);
395395

396396
ReactDOM.render(
397397
<Surface>
@@ -406,9 +406,7 @@ describe('ReactART', () => {
406406
expect(ops).toEqual([null, 'ART']);
407407

408408
ops = [];
409-
expect(Scheduler).toFlushAndYield(
410-
__DEV__ ? ['B', 'B', 'C', 'C'] : ['B', 'C'],
411-
);
409+
expect(Scheduler).toFlushAndYield(['B', 'C']);
412410

413411
expect(ops).toEqual(['Test']);
414412
});

packages/react-cache/src/__tests__/ReactCache-test.internal.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ describe('ReactCache', () => {
2424
jest.resetModules();
2525

2626
ReactFeatureFlags = require('shared/ReactFeatureFlags');
27-
ReactFeatureFlags.debugRenderPhaseSideEffectsForStrictMode = false;
27+
2828
ReactFeatureFlags.replayFailedUnitOfWorkWithInvokeGuardedCallback = false;
2929
React = require('react');
3030
Suspense = React.Suspense;

packages/react-dom/src/__tests__/ReactDOMFiberAsync-test.internal.js

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,6 @@
1010
'use strict';
1111

1212
let React;
13-
let ReactFeatureFlags = require('shared/ReactFeatureFlags');
1413

1514
let ReactDOM;
1615
let Scheduler;
@@ -149,8 +148,7 @@ describe('ReactDOMFiberAsync', () => {
149148
describe('concurrent mode', () => {
150149
beforeEach(() => {
151150
jest.resetModules();
152-
ReactFeatureFlags = require('shared/ReactFeatureFlags');
153-
ReactFeatureFlags.debugRenderPhaseSideEffectsForStrictMode = false;
151+
154152
ReactDOM = require('react-dom');
155153
Scheduler = require('scheduler');
156154
});
@@ -639,9 +637,7 @@ describe('ReactDOMFiberAsync', () => {
639637
expect(container.textContent).toEqual('');
640638

641639
// Everything should render immediately in the next event
642-
expect(Scheduler).toFlushExpired(
643-
__DEV__ ? ['A', 'A', 'B', 'B', 'C', 'C'] : ['A', 'B', 'C'],
644-
);
640+
expect(Scheduler).toFlushExpired(['A', 'B', 'C']);
645641
expect(container.textContent).toEqual('ABC');
646642
});
647643
});

packages/react-dom/src/__tests__/ReactDOMServerIntegrationHooks-test.internal.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ function initModules() {
4040
jest.resetModuleRegistry();
4141

4242
ReactFeatureFlags = require('shared/ReactFeatureFlags');
43-
ReactFeatureFlags.debugRenderPhaseSideEffectsForStrictMode = false;
43+
4444
ReactFeatureFlags.flushSuspenseFallbacksInTests = false;
4545
React = require('react');
4646
ReactDOM = require('react-dom');

packages/react-dom/src/__tests__/ReactDOMServerPartialHydration-test.internal.js

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -77,7 +77,6 @@ describe('ReactDOMServerPartialHydration', () => {
7777
ReactFeatureFlags = require('shared/ReactFeatureFlags');
7878
ReactFeatureFlags.enableSuspenseCallback = true;
7979
ReactFeatureFlags.enableDeprecatedFlareAPI = true;
80-
ReactFeatureFlags.debugRenderPhaseSideEffectsForStrictMode = false;
8180

8281
React = require('react');
8382
ReactDOM = require('react-dom');

packages/react-dom/src/__tests__/ReactDOMServerSelectiveHydration-test.internal.js

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -97,7 +97,6 @@ describe('ReactDOMServerSelectiveHydration', () => {
9797

9898
const ReactFeatureFlags = require('shared/ReactFeatureFlags');
9999
ReactFeatureFlags.enableDeprecatedFlareAPI = true;
100-
ReactFeatureFlags.debugRenderPhaseSideEffectsForStrictMode = false;
101100

102101
React = require('react');
103102
ReactDOM = require('react-dom');

packages/react-dom/src/__tests__/ReactTestUtilsAct-test.js

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -121,7 +121,6 @@ describe('ReactTestUtils.act()', () => {
121121
);
122122
}).toErrorDev([
123123
'An update to App ran an effect, but was not wrapped in act(...)',
124-
'An update to App ran an effect, but was not wrapped in act(...)',
125124
]);
126125
});
127126

@@ -132,7 +131,6 @@ describe('ReactTestUtils.act()', () => {
132131
Scheduler.unstable_flushAll();
133132
}).toErrorDev([
134133
'An update to App ran an effect, but was not wrapped in act(...)',
135-
'An update to App ran an effect, but was not wrapped in act(...)',
136134
]);
137135
});
138136

@@ -143,7 +141,6 @@ describe('ReactTestUtils.act()', () => {
143141
Scheduler.unstable_flushAll();
144142
}).toErrorDev([
145143
'An update to App ran an effect, but was not wrapped in act(...)',
146-
'An update to App ran an effect, but was not wrapped in act(...)',
147144
]);
148145
});
149146
});

packages/react-dom/src/__tests__/ReactUpdates-test.js

Lines changed: 3 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -1324,30 +1324,12 @@ describe('ReactUpdates', () => {
13241324
let hiddenDiv;
13251325
act(() => {
13261326
root.render(<Foo />);
1327-
if (__DEV__) {
1328-
expect(Scheduler).toFlushAndYieldThrough([
1329-
'Foo',
1330-
'Foo',
1331-
'Baz',
1332-
'Baz',
1333-
'Foo#effect',
1334-
]);
1335-
} else {
1336-
expect(Scheduler).toFlushAndYieldThrough([
1337-
'Foo',
1338-
'Baz',
1339-
'Foo#effect',
1340-
]);
1341-
}
1327+
expect(Scheduler).toFlushAndYieldThrough(['Foo', 'Baz', 'Foo#effect']);
13421328
hiddenDiv = container.firstChild.firstChild;
13431329
expect(hiddenDiv.hidden).toBe(true);
13441330
expect(hiddenDiv.innerHTML).toBe('');
13451331
// Run offscreen update
1346-
if (__DEV__) {
1347-
expect(Scheduler).toFlushAndYield(['Bar', 'Bar']);
1348-
} else {
1349-
expect(Scheduler).toFlushAndYield(['Bar']);
1350-
}
1332+
expect(Scheduler).toFlushAndYield(['Bar']);
13511333
expect(hiddenDiv.hidden).toBe(true);
13521334
expect(hiddenDiv.innerHTML).toBe('<p>bar 0</p>');
13531335
});
@@ -1359,11 +1341,7 @@ describe('ReactUpdates', () => {
13591341
expect(hiddenDiv.innerHTML).toBe('<p>bar 0</p>');
13601342

13611343
// Run offscreen update
1362-
if (__DEV__) {
1363-
expect(Scheduler).toFlushAndYield(['Bar', 'Bar']);
1364-
} else {
1365-
expect(Scheduler).toFlushAndYield(['Bar']);
1366-
}
1344+
expect(Scheduler).toFlushAndYield(['Bar']);
13671345
expect(hiddenDiv.innerHTML).toBe('<p>bar 1</p>');
13681346
},
13691347
);

packages/react-dom/src/events/__tests__/DOMModernPluginEventSystem-test.internal.js

Lines changed: 2 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1701,12 +1701,7 @@ describe('DOMModernPluginEventSystem', () => {
17011701
const root = ReactDOM.createRoot(container);
17021702
root.render(<Test counter={0} />);
17031703

1704-
// Dev double-render
1705-
if (__DEV__) {
1706-
expect(Scheduler).toFlushAndYield(['Test', 'Test']);
1707-
} else {
1708-
expect(Scheduler).toFlushAndYield(['Test']);
1709-
}
1704+
expect(Scheduler).toFlushAndYield(['Test']);
17101705

17111706
// Click the button
17121707
dispatchClickEvent(ref.current);
@@ -1718,12 +1713,7 @@ describe('DOMModernPluginEventSystem', () => {
17181713
// Increase counter
17191714
root.render(<Test counter={1} />);
17201715
// Yield before committing
1721-
// Dev double-render
1722-
if (__DEV__) {
1723-
expect(Scheduler).toFlushAndYieldThrough(['Test', 'Test']);
1724-
} else {
1725-
expect(Scheduler).toFlushAndYieldThrough(['Test']);
1726-
}
1716+
expect(Scheduler).toFlushAndYieldThrough(['Test']);
17271717

17281718
// Click the button again
17291719
dispatchClickEvent(ref.current);

packages/react-dom/src/events/__tests__/DeprecatedDOMEventResponderSystem-test.internal.js

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -811,7 +811,7 @@ describe('DOMEventResponderSystem', () => {
811811

812812
const root = ReactDOM.createRoot(container);
813813
root.render(<Test counter={0} />);
814-
expect(Scheduler).toFlushAndYield(__DEV__ ? ['Test', 'Test'] : ['Test']);
814+
expect(Scheduler).toFlushAndYield(['Test']);
815815

816816
// Click the button
817817
dispatchClickEvent(ref.current);
@@ -823,9 +823,7 @@ describe('DOMEventResponderSystem', () => {
823823
// Increase counter
824824
root.render(<Test counter={1} />);
825825
// Yield before committing
826-
expect(Scheduler).toFlushAndYieldThrough(
827-
__DEV__ ? ['Test', 'Test'] : ['Test'],
828-
);
826+
expect(Scheduler).toFlushAndYieldThrough(['Test']);
829827

830828
// Click the button again
831829
dispatchClickEvent(ref.current);

packages/react-reconciler/src/ReactFiberBeginWork.js

Lines changed: 60 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -181,6 +181,8 @@ import {
181181
getWorkInProgressRoot,
182182
} from './ReactFiberWorkLoop';
183183

184+
import {disableLogs, reenableLogs} from 'shared/ConsolePatchingDev';
185+
184186
const ReactCurrentOwner = ReactSharedInternals.ReactCurrentOwner;
185187

186188
let didReceiveUpdate: boolean = false;
@@ -320,14 +322,19 @@ function updateForwardRef(
320322
debugRenderPhaseSideEffectsForStrictMode &&
321323
workInProgress.mode & StrictMode
322324
) {
323-
nextChildren = renderWithHooks(
324-
current,
325-
workInProgress,
326-
render,
327-
nextProps,
328-
ref,
329-
renderExpirationTime,
330-
);
325+
disableLogs();
326+
try {
327+
nextChildren = renderWithHooks(
328+
current,
329+
workInProgress,
330+
render,
331+
nextProps,
332+
ref,
333+
renderExpirationTime,
334+
);
335+
} finally {
336+
reenableLogs();
337+
}
331338
}
332339
setIsRendering(false);
333340
} else {
@@ -658,14 +665,19 @@ function updateFunctionComponent(
658665
debugRenderPhaseSideEffectsForStrictMode &&
659666
workInProgress.mode & StrictMode
660667
) {
661-
nextChildren = renderWithHooks(
662-
current,
663-
workInProgress,
664-
Component,
665-
nextProps,
666-
context,
667-
renderExpirationTime,
668-
);
668+
disableLogs();
669+
try {
670+
nextChildren = renderWithHooks(
671+
current,
672+
workInProgress,
673+
Component,
674+
nextProps,
675+
context,
676+
renderExpirationTime,
677+
);
678+
} finally {
679+
reenableLogs();
680+
}
669681
}
670682
setIsRendering(false);
671683
} else {
@@ -731,14 +743,19 @@ function updateBlock<Props, Data>(
731743
debugRenderPhaseSideEffectsForStrictMode &&
732744
workInProgress.mode & StrictMode
733745
) {
734-
nextChildren = renderWithHooks(
735-
current,
736-
workInProgress,
737-
render,
738-
nextProps,
739-
data,
740-
renderExpirationTime,
741-
);
746+
disableLogs();
747+
try {
748+
nextChildren = renderWithHooks(
749+
current,
750+
workInProgress,
751+
render,
752+
nextProps,
753+
data,
754+
renderExpirationTime,
755+
);
756+
} finally {
757+
reenableLogs();
758+
}
742759
}
743760
setIsRendering(false);
744761
} else {
@@ -923,7 +940,12 @@ function finishClassComponent(
923940
debugRenderPhaseSideEffectsForStrictMode &&
924941
workInProgress.mode & StrictMode
925942
) {
926-
instance.render();
943+
disableLogs();
944+
try {
945+
instance.render();
946+
} finally {
947+
reenableLogs();
948+
}
927949
}
928950
setIsRendering(false);
929951
} else {
@@ -1485,14 +1507,19 @@ function mountIndeterminateComponent(
14851507
debugRenderPhaseSideEffectsForStrictMode &&
14861508
workInProgress.mode & StrictMode
14871509
) {
1488-
value = renderWithHooks(
1489-
null,
1490-
workInProgress,
1491-
Component,
1492-
props,
1493-
context,
1494-
renderExpirationTime,
1495-
);
1510+
disableLogs();
1511+
try {
1512+
value = renderWithHooks(
1513+
null,
1514+
workInProgress,
1515+
Component,
1516+
props,
1517+
context,
1518+
renderExpirationTime,
1519+
);
1520+
} finally {
1521+
reenableLogs();
1522+
}
14961523
}
14971524
}
14981525
reconcileChildren(null, workInProgress, value, renderExpirationTime);

0 commit comments

Comments
 (0)