mirror of
https://github.com/facebook/react.git
synced 2025-11-01 09:12:30 +00:00
instance.unstable_asyncUpdates = true creates an async subtree
Same behavior as unstable_asyncRender. Can be used to wrap a specific subtree, rather than an entire root.
This commit is contained in:
@@ -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 <div>{this.state.step}</div>;
|
||||
}
|
||||
}
|
||||
|
||||
ReactDOM.render(<Component />, 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 <Child />;
|
||||
}
|
||||
}
|
||||
|
||||
let instance;
|
||||
class Child extends React.Component {
|
||||
state = {step: 0};
|
||||
render() {
|
||||
instance = this;
|
||||
return <div>{this.state.step}</div>;
|
||||
}
|
||||
}
|
||||
|
||||
ReactDOM.render(<Component />, container);
|
||||
jest.runAllTimers();
|
||||
|
||||
instance.setState({step: 1});
|
||||
expect(container.textContent).toEqual('0');
|
||||
jest.runAllTimers();
|
||||
expect(container.textContent).toEqual('1');
|
||||
})
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
@@ -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');
|
||||
|
||||
Reference in New Issue
Block a user