diff --git a/src/renderers/dom/fiber/__tests__/ReactDOMFiberAsync-test.js b/src/renderers/dom/fiber/__tests__/ReactDOMFiberAsync-test.js
index 2d9f6d9d60..3879d59dae 100644
--- a/src/renderers/dom/fiber/__tests__/ReactDOMFiberAsync-test.js
+++ b/src/renderers/dom/fiber/__tests__/ReactDOMFiberAsync-test.js
@@ -70,6 +70,52 @@ describe('ReactDOMFiberAsync', () => {
jest.runAllTimers();
expect(container.textContent).toEqual('1');
});
+
+ it('unstable_asyncUpdates creates an async subtree', () => {
+ let instance;
+ class Component extends React.Component {
+ state = {step: 0};
+ unstable_asyncUpdates = true;
+ render() {
+ instance = this;
+ return
{this.state.step}
;
+ }
+ }
+
+ ReactDOM.render(, container);
+ jest.runAllTimers();
+
+ instance.setState({step: 1});
+ expect(container.textContent).toEqual('0');
+ jest.runAllTimers();
+ expect(container.textContent).toEqual('1');
+ });
+
+ it('updates inside an async subtree are async by default', () => {
+ class Component extends React.Component {
+ unstable_asyncUpdates = true;
+ render() {
+ return ;
+ }
+ }
+
+ let instance;
+ class Child extends React.Component {
+ state = {step: 0};
+ render() {
+ instance = this;
+ return {this.state.step}
;
+ }
+ }
+
+ ReactDOM.render(, container);
+ jest.runAllTimers();
+
+ instance.setState({step: 1});
+ expect(container.textContent).toEqual('0');
+ jest.runAllTimers();
+ expect(container.textContent).toEqual('1');
+ })
});
}
});
diff --git a/src/renderers/shared/fiber/ReactFiberClassComponent.js b/src/renderers/shared/fiber/ReactFiberClassComponent.js
index d899fcc6a9..8fcef7075f 100644
--- a/src/renderers/shared/fiber/ReactFiberClassComponent.js
+++ b/src/renderers/shared/fiber/ReactFiberClassComponent.js
@@ -305,6 +305,10 @@ module.exports = function(
instance.refs = emptyObject;
instance.context = getMaskedContext(workInProgress, unmaskedContext);
+ if (instance.unstable_asyncUpdates === true) {
+ workInProgress.contextTag |= AsyncUpdates;
+ }
+
if (typeof instance.componentWillMount === 'function') {
if (__DEV__) {
startPhaseTimer(workInProgress, 'componentWillMount');