1- import React , { PureComponent , unstable_AsyncMode } from 'react' ;
2- import { flushSync , render , unstable_deferredUpdates } from 'react-dom' ;
1+ import React , { PureComponent } from 'react' ;
2+ import { flushSync , render } from 'react-dom' ;
33import _ from 'lodash' ;
44import Charts from './Charts' ;
55import Clock from './Clock' ;
@@ -54,22 +54,21 @@ class App extends PureComponent {
5454 return ;
5555 }
5656 if ( this . state . strategy !== 'async' ) {
57- this . setState ( state => ( {
58- showDemo : ! state . showDemo ,
59- } ) ) ;
57+ flushSync ( ( ) => {
58+ this . setState ( state => ( {
59+ showDemo : ! state . showDemo ,
60+ } ) ) ;
61+ } ) ;
6062 return ;
6163 }
6264 if ( this . _ignoreClick ) {
6365 return ;
6466 }
6567 this . _ignoreClick = true ;
6668
67- // TODO: needing setTimeout here seems like a React bug.
68- setTimeout ( ( ) => {
69- unstable_deferredUpdates ( ( ) => {
70- this . setState ( { showDemo : true } , ( ) => {
71- this . _ignoreClick = false ;
72- } ) ;
69+ requestIdleCallback ( ( ) => {
70+ this . setState ( { showDemo : true } , ( ) => {
71+ this . _ignoreClick = false ;
7372 } ) ;
7473 } ) ;
7574 } ;
@@ -107,11 +106,8 @@ class App extends PureComponent {
107106 this . debouncedHandleChange ( value ) ;
108107 break ;
109108 case 'async' :
110- // TODO: needing setTimeout here seems like a React bug.
111- setTimeout ( ( ) => {
112- unstable_deferredUpdates ( ( ) => {
113- this . setState ( { value} ) ;
114- } ) ;
109+ requestIdleCallback ( ( ) => {
110+ this . setState ( { value} ) ;
115111 } ) ;
116112 break ;
117113 default :
@@ -120,8 +116,6 @@ class App extends PureComponent {
120116 } ;
121117
122118 render ( ) {
123- const Wrapper =
124- this . state . strategy === 'async' ? unstable_AsyncMode : 'div' ;
125119 const { showClock} = this . state ;
126120 const data = this . getStreamData ( this . state . value ) ;
127121 return (
@@ -137,20 +131,23 @@ class App extends PureComponent {
137131 defaultValue = { this . state . input }
138132 onChange = { this . handleChange }
139133 />
140- < Wrapper >
141- < div className = "demo" onClick = { this . handleChartClick } >
142- { this . state . showDemo && (
143- < Charts data = { data } onClick = { this . handleChartClick } />
144- ) }
145- < div style = { { display : showClock ? 'block' : 'none' } } >
146- < Clock />
147- </ div >
134+ < div className = "demo" onClick = { this . handleChartClick } >
135+ { this . state . showDemo && (
136+ < Charts data = { data } onClick = { this . handleChartClick } />
137+ ) }
138+ < div style = { { display : showClock ? 'block' : 'none' } } >
139+ < Clock />
148140 </ div >
149- </ Wrapper >
141+ </ div >
150142 </ div >
151143 ) ;
152144 }
153145}
154146
155147const container = document . getElementById ( 'root' ) ;
156- render ( < App /> , container ) ;
148+ render (
149+ < React . unstable_AsyncMode >
150+ < App />
151+ </ React . unstable_AsyncMode > ,
152+ container
153+ ) ;
0 commit comments